Comment créer une application de réservation avec Vue ?

La gestion des réservations est un élément essentiel de l’activité dans le secteur des services, où les horaires et la capacité d’accueil des clients sont essentiels, comme dans les restaurants.

Avec Back4app, l’API Twilio et Vue, vous pouvez créer une application simple de réservation de restaurant avec des fonctionnalités telles que la réservation, la réception de messages de confirmation et la visualisation des créneaux réservés.

Dans cet article, vous allez construire et déployer une application de réservation avec Vue sur le front-end, Back4app pour gérer votre back-end et vos besoins de déploiement, et Twilio pour communiquer avec les utilisateurs via Whatsapp.

Aperçu du projet

Dans ce guide, vous allez construire une application de réservation simple avec Vue. L’application de réservation aura une vue ReservationForm et une vue ReservationList.

Les clients interagissent avec la vue ReservationForm pour saisir les détails de leur réservation, tels que le nom, l’adresse électronique, la date, l’heure et le numéro de téléphone. Ils peuvent également consulter toutes les réservations effectuées dans la vue ReservationList.

Vous utiliserez les éléments suivants :

  • Back4app Backend: Vous allez créer un backend Back4app pour stocker et gérer les données de réservation de votre application Vue dans une base de données.
  • API Twilio: Vous intégrerez l’API Twilio dans votre application Vue pour envoyer des messages de confirmation WhatsApp aux clients qui ont effectué une réservation.
  • L’agent AI de Back4pp: Vous allez créer quatre fonctions cloud avec l’agent AI de Back4app, que vous allez intégrer dans votre application Vue pour gérer :
    • stocker les détails de la réservation dans une base de données Back4App
    • Vérifier la disponibilité de la date et de l’heure à réserver
    • L’envoi d’un message de succès WhatsApp avec l’API Twilio indiquant à l’invité que sa réservation a été effectuée.
    • Visualiser les réservations déjà effectuées par les clients dans votre base de données.
  • Conteneurs Back4app: Vous allez déployer votre application Vue dans un conteneur Back4app pour la rendre accessible en ligne.

Construire votre application Vue

Cette section vous guidera dans la mise en place de votre environnement de développement et dans la construction du modèle de base de votre application de réservation.

Configuration de l’environnement de développement

Pour créer une application Vue, exécutez la commande suivante dans votre terminal :

npm create vue

La commande ci-dessus vous invitera à nommer votre application et à activer certaines fonctionnalités pour votre application, telles que l’ajout de TypeScript, la prise en charge de JSX, etc. Sélectionnez no pour toutes les options à l’exception de “Vue Router”. Vous en aurez besoin pour naviguer entre les vues.

Ensuite, allez dans le répertoire créé et exécutez la commande ci-dessous pour installer les dépendances nécessaires :

npm install

Ensuite, installez le SDK Parse en exécutant la commande ci-dessous :

npm install parse

Le SDK Parse vous permet de communiquer entre votre application Vue et votre backend Back4app.

Après avoir configuré votre environnement de développement, créez les vues de votre application de réservation.

Créer les vues de votre application

Créez les vues ReservationForm et ReservationList dans le répertoire des vues de votre application.

Ensuite, activez le routage entre ces deux vues en ajoutant le code ci-dessous dans le fichier index.js de votre répertoire routeur:

// index.js
import { createRouter, createWebHistory } from "vue-router";
import ReservationForm from "@/views/ReservationForm.vue";

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: "/",
      name: "Home",
      component: ReservationForm,
    },
    {
      path: "/reservations",
      name: "Reservations",
      component: () => import("@/views/ReservationList.vue"),
    },
  ],
});

export default router;

Le bloc de code ci-dessus met en place le routage dans votre application Vue. Il définit une route / et une route /reservations. Lorsque les invités accèdent à l’URL de l’application, le bloc de code les dirige vers la vue ReservationForm en tant que route Home.

La route /reservations dirige les utilisateurs vers la vue ReservationList. Cette route est chargée paresseusement, ce qui signifie que votre application ne la charge que lorsque c’est nécessaire, ce qui contribue à améliorer les performances de votre application.

Ensuite, pour permettre aux utilisateurs de naviguer entre les deux itinéraires, configurez votre fichier App.vue pour qu’il rende une barre de navigation affichant les liens de l’itinéraire :

//App.vue
<script setup>
import { RouterLink, RouterView } from 'vue-router'
</script>

<template>
  <header>
    <div class="wrapper" id="app">
      <nav>
        <RouterLink to="/">Home</RouterLink>
        <RouterLink to="/reservations">View Reservations</RouterLink>
      </nav>
    </div>
  </header>
  <RouterView />
</template>

Le bloc de code ci-dessus affiche le fichier App.vue, qui constitue la présentation principale de votre application. Le bloc de code importe les composants RouterLink et RouterView de la bibliothèque Vue Router, représentant chaque route par un composant RouterLink.

Le composant RouterLink prend une propriété to pour spécifier la route vers laquelle le lien est dirigé. Le composant RouterView fait office de placeholder et rend dynamiquement le contenu de l’itinéraire actuel.

Dans votre fichier ReservationForm.vue, ajoutez le bloc de code ci-dessous pour créer un formulaire permettant aux utilisateurs de saisir les détails de leur réservation :

// ReservationForm.vue
<template>
  <div>
    <form>
      <input v-model="reservation.name" placeholder="Name" required />
      <input
        v-model="reservation.email"
        type="email"
        placeholder="Email"
        required
      />
      <input
        v-model="reservation.date"
        type="date"
        placeholder="Date"
        required
      />
      <input
        v-model="reservation.time"
        type="time"
        placeholder="Time"
        required
      />
      <input
        v-model="reservation.phoneNumber"
        type="tel"
        placeholder="Phone Number"
        required
      />
      <button type="submit">Create Reservation</button>
    </form>
  </div>
</template>

<script setup>
import { ref } from "vue";
const reservation = ref({
  name: "",
  email: "",
  date: "",
  time: "",
  phoneNumber: "",
});
</script>

Le bloc de code ci-dessus crée un élément de formulaire avec des champs obligatoires pour capturer les entrées de divers détails comme le nom de l’utilisateur, l’adresse électronique, la date, l’heure et le numéro de téléphone.

Le bloc de code ci-dessus crée ensuite un objet de réservation réactif pour stocker les détails de l’utilisateur à l’aide de la fonction ref de la bibliothèque vue.

Ensuite, ajoutez le bloc de code suivant à votre fichier ReservationList.vue pour afficher la liste des réservations effectuées par les utilisateurs :

// ReservationList.vue
<template>
  <div>
    <ul v-if="reservations.length" class="wrapper">
      <li
        v-for="reservation in reservations"
        :key="reservation.objectId"
        class="card"
      >
        <p>Name: {{ reservation.name }}</p>
        <p>Date: {{ new Date(reservation.date).toLocaleDateString() }}</p>
        <p>Time: {{ reservation.time }}</p>
        <p>Phone: {{ reservation.phoneNumber }}</p>
      </li>
    </ul>
    <p v-else>No reservations found.</p>
  </div>
</template>

<script setup>
import { ref } from "vue";

const reservations = ref([]);
</script>

Le bloc de code ci-dessus utilise une directive de déclaration conditionnelle vue, v-if, pour afficher les réservations existantes, le cas échéant.

Si des réservations existent, le bloc de code parcourt chaque réservation dans le tableau des réservations avec la directive v-for et affiche les réservations effectuées.

Styliser les vues de votre application

Ajoutez le bloc de style suivant à votre vue ReservationList pour contrôler l’apparence de la liste et des autres éléments :

// ReservationList.vue
<style scoped>
h1{
  margin-block-end: 2rem;
}

.card{
  background-color: #D99858;
  display: flex;
  flex-direction: column;
  gap: 1rem;
  border-radius: 12px;
  padding: 2rem;
  align-items: center;
}

li{
  color: #FFFFFF;
}

.wrapper{
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2rem;
}

div{
  padding-inline-start: 1rem;
}

</style>

Ajoutez le bloc de style ci-dessous à votre vue ReservationForm pour contrôler l’apparence du formulaire :

// ReservationForm.vue
<style scoped>

  form{
    display: flex;
    flex-direction: column;
    gap: 1rem;
    align-items: center;
  }

</style>

Enfin, définissez des styles globaux pour votre application Vue en ajoutant les styles CSS suivants à votre fichier main.css dans le répertoire assets :

/* main.css */
@import url('<https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap>');

*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body{
  font-family: "Montserrat", sans-serif;
  background-color: #333333;
  color: #FFFFFF;
}
nav {
  padding: 10px;
  display: flex;
  justify-content: space-between;
}
nav a{
  color: inherit;
  text-decoration: none;
  font-weight: 500;
  color: #888888;
  margin-block-end: 3rem;
}
nav a:hover{
  color: #D99858;
}
header{
  padding: 1rem;
}
button {
  background-color: #FFFFFF;
  color: #D99858;
  border: none;
  padding: 0.7rem 0.9rem;
  font-size: 14px;
  border-radius: 7px;
  font-weight: 500;
}
button:hover {
  background-color: #D99858;
  color: #FFFFFF; 
}
input{
  inline-size: 100%;
  border: none;
  border-radius: 5px;
  outline: none;
  padding: 1rem;
  font-family: "Montserrat", sans-serif;
}
.container{
  inline-size: 60%;
  margin: auto;
}

Après avoir élaboré le modèle de votre application de réservation, créez un Back4app Backend pour stocker les détails de la réservation dans une base de données.

Création d’un backend Back4app

La création de votre Backend sur Back4app nécessite un compte Back4app. Si vous n’en avez pas, vous pouvez vous inscrire gratuitement.

Connectez-vous à votre compte et cliquez sur le bouton “NEW APP” en haut à droite. Cela vous mènera à une page où vous choisirez l’option “Backend as a Service“.

En cliquant sur “Backend as a Service“, vous serez invité à donner un nom à votre instance d’application et à sélectionner le type de base de données pour votre application. Sélectionnez la base de données PostgreSQL et cliquez sur le bouton “Créer“.

Après que Back4app ait configuré votre application, vous serez dirigé vers l’instance de votre application, comme indiqué ci-dessous.

Tableau de bord Back4app

Récupérez votre “Application ID” et votre “JavaScript Key” dans la section “Security & Keys“. Vous pouvez trouver cette section en cliquant sur “App Settings” dans la barre latérale.

Clés de sécurité Back4app

Ensuite, créez un fichier .env et ajoutez votre “Application ID” et votre “Javascript Key” pour les charger en tant que variables environnementales dans votre application :

VITE_BACK4APP_APPLICATION_ID = <YOUR_APP_ID>
VITE_BACK4APP_JAVASCRIPT_KEY = YOUR_JAVASCRIPT_KEY>

Maintenant, modifiez votre fichier main.js pour initialiser Parse dans votre application Vue. Comme cela :

//  main.js
import "./assets/main.css";
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import Parse from "parse/dist/parse.min.js";

Parse.initialize(
  `${import.meta.env.VITE_BACK4APP_APPLICATION_ID}`,
  `${import.meta.env.VITE_BACK4APP_JAVASCRIPT_KEY}`,
);

Parse.serverURL = "<https://parseapi.back4app.com/>";

const app = createApp(App);

app.use(router);

app.mount("#app");

Le bloc de code ci-dessus importe et initialise le SDK Parse dans votre application Vue, permettant à votre application de communiquer avec votre backend Back4app.

Maintenant, vous devez stocker les détails de la réservation dans votre base de données Back4app. Pour stocker les détails de la réservation d’un client, vous allez créer une classe dans votre base de données en utilisant l’agent AI de Back4app.

La classe stocke les détails de la réservation, tels que le nom, l’adresse électronique, la date, etc.

Création de la classe de réservation et des fonctions cloud à l’aide de l’agent AI

Localisez l’onglet “AI Agent” en haut à gauche de votre écran et envoyez à l’agent l’invite ci-dessous pour créer la classe dans la base de données :

Create database tables in my Back4app app with the following information.

1. Reservation Class:
Class Name: Reservation

Fields:
objectId (String, Automatically generated by Back4App).
name (String, Required)
email (String, Required)
date (Date, Required)
time (String, Required)
phoneNumber (String, Required)

Populate the database tables with test data.

My Parse App ID: <Your Parse App ID>

Vous devriez obtenir une réponse similaire à celle ci-dessous :

Réponse de l'agent AI

Après avoir créé avec succès votre classe Reservation avec des champs pour stocker les détails de votre réservation, vous allez créer quatre fonctions cloud avec l’agent AI qui interagira avec la base de données créée. Vous allez créer quatre fonctions en nuage avec l’agent IA qui interagira avec la base de données que vous avez créée.

Demandez à l’agent AI de créer une fonction cloud pour stocker les données de la classe Réservation:

Create a Cloud Code function "createReservation" that takes in necessary 
arguments to create a new reservation in the Reservation class.

Vous devriez obtenir une réponse similaire à celle ci-dessous :

Réponse de l'agent AI

Après avoir créé la fonction createReservation, envoyez à l’agent AI la commande suivante pour vérifier la disponibilité d’une date et d’une heure que l’invité doit réserver :

Create a Cloud Code function "checkAvailability" to check the availability of a reserved time and date. Create this second Cloud Code function in the same file.

Vous devriez obtenir une réponse similaire à celle ci-dessous :

Réponse de l'agent AI

L’envoi de messages WhatsApp avec l’API WhatsApp de Twilio nécessite la création et la configuration d’un compte Twilio. Twilio fournit une API permettant aux utilisateurs d’envoyer des messages WhatsApp à partir de votre application.

Obtenez le SID de votre compte Twilio, le jeton d’authentification Twilio et le numéro Twilio Whatsapp à partir de votre compte Twilio et demandez à l’agent IA de créer une fonction cloud sendWhatsAppConfirmation avec l’API de Twilio :

Create a Cloud Function with Twilio's WhatsApp API to send a WhatsApp confirmation message. Here are the Twilio account details you will need:
Twilio Account SID: <Your Twilio Account SID>
Auth Token: <Your Twilio Authentication Token>
WhatsApp number: <The Twilio WhatsApp Number>

Vous devriez obtenir une réponse similaire à celle ci-dessous :

Réponse de l'agent AI

Ensuite, demandez à l’agent IA de créer la dernière fonction de nuage pour afficher toutes les réservations stockées dans la base de données :

Write a cloud code function to view all reservations stored in the database in the same file with the other three cloud functions.

Vous devriez obtenir une réponse similaire à celle ci-dessous :

Réponse de l'agent AI

Vous avez créé toutes les fonctions dont vous avez besoin pour votre application avec l’instance Back4app. L’étape suivante consiste à intégrer les fonctions cloud de votre backend Back4app dans votre application Vue.

Intégrer vos fonctions cloud dans votre application Vue

Cette section vous apprendra à intégrer vos fonctions cloud dans votre application Vue. Vous pouvez appeler les fonctions cloud que vous avez définies sur votre Back4app’s Backend dans votre application Vue en exécutant la fonction Parse.cloud.run().

Modifiez le bloc de modèle dans votre fichier ReservationForm.vue pour exécuter une fonction submitReservation lors de la soumission du formulaire :

// ReservationForm.vue
<template>
  <div>
    <form @submit.prevent="submitReservation">
      // calls the function on form submission
      <input v-model="reservation.name" placeholder="Name" required />
      <input
        v-model="reservation.email"
        type="email"
        placeholder="Email"
        required
      />
      <input
        v-model="reservation.date"
        type="date"
        placeholder="Date"
        required
      />
      <input
        v-model="reservation.time"
        type="time"
        placeholder="Time"
        required
      />
      <input
        v-model="reservation.phoneNumber"
        type="tel"
        placeholder="Phone Number"
        required
      />
      <button type="submit">Create Reservation</button>
    </form>
  </div>
</template>

Ensuite, modifiez le bloc de script dans votre fichier ReservationForm.vue pour définir la fonction submitReservation et exécuter les fonctions du nuage associées à la soumission du formulaire :

// ReservationForm.vue
<script setup>
import { ref } from "vue";
import Parse from "parse/dist/parse.min.js";

const reservation = ref({
  name: "",
  email: "",
  date: "",
  time: "",
  phoneNumber: "",
});

const submitReservation = async () => {
  try {
    const availabilityResult = await Parse.Cloud.run("checkAvailability", {
      date: reservation.value.date,
      time: reservation.value.time,
    });

    if (availabilityResult.available) {
      const creationResult = await Parse.Cloud.run("createReservation", {
        ...reservation.value,
        date: {
          __type: "Date",
          iso: new Date(
            reservation.value.date + "T" + reservation.value.time,
          ).toISOString(),
        },
      });

      if (creationResult) {
        await Parse.Cloud.run("sendWhatsAppConfirmation", {
          to: reservation.value.phoneNumber,
          reserveeName: reservation.value.name,
          body: "Your reservation has been confirmed.",
        });

        alert(
          "Reservation created and confirmation has been sent via WhatsApp.",
        );
      }
    } else {
      alert("Sorry, the chosen date and time are not available.");
    }
  } catch (error) {
    console.error("Error creating reservation:", error);
    alert("Error while processing your reservation: " + error.message);
  }
};
</script>

Le bloc de code ci-dessus appelle la fonction submitReservation pour gérer la soumission de la réservation.

La fonction vérifie d’abord la disponibilité de la date et de l’heure choisies en appelant la fonction cloud checkAvailability.

Si la date et l’heure spécifiées sont disponibles, le bloc de code appelle une autre fonction du nuage, createReservation, pour créer la réservation avec les détails de l’invité.

Le bloc de code appelle ensuite la fonction cloud sendWhatsAppConfirmation pour envoyer un message WhatsApp informant l’invité qu’il a bien réservé son créneau horaire.

Ensuite, pour permettre aux invités de voir tous les créneaux horaires réservés, modifiez le bloc de script du fichier ReservationList.vue pour exécuter la fonction nuage getAllReservations:

// ReservationList.vue
<script setup>
import { ref, onBeforeMount } from "vue";
import Parse from "parse/dist/parse.min.js";

const reservations = ref([]);

const fetchReservations = async () => {
  try {
    const result = await Parse.Cloud.run("getAllReservations");
    reservations.value = result;
  } catch (error) {
    console.error("Error retrieving reservations:", error);
    alert(error.message);
  }
};

onBeforeMount(fetchReservations);
</script>

Le bloc de code ci-dessus appelle une fonction fetchReservations juste avant que Vue ne monte le composant avec la fonction vue onBeforeMount.

La fonction fetchReservations exécute la fonction cloud getAllReservations pour récupérer toutes les réservations stockées dans la classe Reservation de la base de données Back4app.

Test de l’application

Avant de déployer votre application dans un conteneur Back4app, testez-la pour vous assurer que toutes les fonctionnalités sont pleinement fonctionnelles.

Démarrez votre application en exécutant la commande ci-dessous :

npm run dev

L’exécution de la commande ci-dessus démarre votre application à l’adresse http://localhost:5173/.

Naviguez sur http://localhost:5173/ pour voir votre demande, comme le montre l’image ci-dessous :

Formulaire de réservation

Si vous allez sur l’onglet “Voir les réservations“, vous verrez les réservations que votre agent AI a introduites dans la base de données.

Liste de réservation par défaut

Créez une nouvelle réservation en remplissant le formulaire et en cliquant sur le bouton “Créer une réservation“.

Création d'une réservation

Pour vérifier si votre réservation a été acceptée, allez dans l’onglet “Voir les réservations“, où vous verrez votre réservation.

Réservations

Enfin, ouvrez votre application WhatsApp pour afficher le message de confirmation envoyé à votre numéro WhatsApp.

Confirmation WhatsApp

Déployer votre application avec l’agent AI de Back4app sur les conteneurs Back4app

Pour déployer votre application dans un conteneur Back4app, vous devez créer un fichier Docker pour votre application Vue.

Créez un fichier Docker dans le répertoire racine de votre projet et ajoutez le bloc de code ci-dessous :

# Dockerfile

FROM node:18

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM nginx:1.19.0-alpine

COPY --from=0 /app/dist /usr/share/nginx/html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

Après avoir créé votre fichier Docker, poussez votre code dans un dépôt GitHub. Pour déployer votre application depuis GitHub avec l’agent AI, Back4app vous demande d’installer l’application Back4App Containers GitHub sur votre compte GitHub.

Vous devrez également accorder à l’application les autorisations nécessaires pour accéder au dépôt de code de votre application.

Ensuite, rendez-vous sur la page d’accueil de Back4app et cliquez sur le bouton “Nouvelle application” situé dans le coin supérieur droit de votre écran.

Vous accéderez à un écran de configuration, où vous devrez choisir le type d’application que vous souhaitez créer.

Sélectionnez l’option Back4app Agent, comme indiqué dans l’image ci-dessous.

Créer une nouvelle page d'accueil pour l'application

Lorsque vous sélectionnez l’option Agent Back4app, vous serez redirigé vers la page de l’agent Back4app AI.

Donnez à l’agent AI l’invite ci-dessous pour lancer le processus de déploiement de votre application :

Deploy my "YOUR_REPOSITORY_URL" repository on GitHub to a Back4App Container.
Here are the required environmental variables:
VITE_BACK4APP_APPLICATION_ID = "BACK4APP_APP_ID"
VITE_BACK4APP_JAVASCRIPT_KEY = "BACK4APP_JAVASCRIPT_KEY"

Remplacez les espaces réservés par leurs valeurs réelles. L’invite ci-dessus lancera votre processus de déploiement.

Une fois terminé, l’agent AI répondra, indiquant le succès ou un déploiement en attente. Si vous obtenez un déploiement en attente, vous pouvez suivre l’état du déploiement de votre application sur le tableau de bord de votre conteneur Back4app.

Vous devriez obtenir une réponse similaire à l’image ci-dessous :

Réponse de l'agent AI

Vous pouvez également déployer manuellement votre application dans un conteneur Back4app.

Conclusion

Dans cet article, vous avez construit et déployé une application fonctionnelle de réservation de restaurant en utilisant Back4app, Vue et l’API Twilio.

Avec votre application, les utilisateurs peuvent faire des réservations, qui sont stockées dans votre backend Back4app. Ils peuvent visualiser les réservations qu’ils ont faites à travers des interfaces créées par Vue et alimentées par votre code Back4app cloud, que vous avez généré en utilisant l’agent AI.

En outre, votre application confirme les réservations réussies par le biais de messages WhatsApp alimentés par l’API Twilio.

Vous pouvez trouver le code complet utilisé dans ce tutoriel sur ce dépôt GitHub.


Leave a reply

Your email address will not be published.