‫-: Très bien.
‫Créons donc maintenant un nouveau document de réservation dans notre base de données
‫chaque fois qu'un utilisateur achète avec succès une visite.
‫On est donc de retour ici dans le contrôleur
‫de réservation et dans l'appel
‫d'offres brut, qui crée les sessions de caisse, n'est-ce pas ?
‫Et rappelez-vous qu'ici nous avons cette URL de réussite et
‫cette URL est la base de la fonctionnalité que
‫nous allons implémenter dans cette conférence.
‫Ainsi, chaque fois qu'une vérification
‫est réussie, le navigateur ira automatiquement à cette URL,
‫qui est actuellement simplement notre page d'accueil, n'est-ce pas ?
‫C'est aussi à ce moment-là, donc
‫lorsqu'un paiement est réussi que nous voulons créer une nouvelle
‫réservation, n'est-ce pas ?
‫Donc, fondamentalement, nous voulons créer une nouvelle
‫réservation chaque fois que cette URL est accessible ici.
‫Maintenant, nous pourrions maintenant créer une nouvelle route pour ce succès, mais
‫nous devrons alors créer une toute nouvelle page et cela n'en
‫vaut pas vraiment la peine dans ce cas.
‫Et c'est parce que ce que nous allons faire dans cette
‫conférence n'est de toute façon qu'une solution
‫temporaire parce que ce n'est pas vraiment sécurisé, d'accord ?
‫Alors rappelez-vous comment nous avons dit il
‫y a quelques conférences et ce joli diagramme que plus
‫tard, lorsqu'un site Web sera réellement déployé sur un serveur,
‫nous aurons accès à l'objet de session une fois l'achat
‫terminé à l'aide de Stripe Webhooks.
‫Et donc ces webhooks seront alors parfaits pour
‫nous pour créer une nouvelle réservation.
‫D'accord?
‫Mais pour l'instant, puisque nous ne pouvons pas encore
‫le faire, utilisons une solution
‫de contournement, qui consiste simplement à mettre les données dont nous avons
‫besoin pour créer une nouvelle réservation directement dans cette URL en tant que chaîne de requête.
‫D'accord?
‫Et nous devons créer une chaîne de requête car Stripe
‫fera simplement une demande d'obtention à cette URL ici, et nous ne
‫pouvons donc pas vraiment envoyer de corps ou de données avec, à
‫l'exception de la chaîne de requête.
‫Très bien?
‫Faisons-le et ce dont nous avons besoin ici, ce sont essentiellement
‫les trois champs obligatoires de notre modèle de réservation.
‫Donc visite,
‫utilisateur et prix.
‫Donc, la
‫tournée
‫est égale à req.
‫paramètres.
‫n'est-ce pas ?
‫Alors qu'est-ce que j'ai fait ici ?
‫Donc c'est correct.
‫Ensuite, nous avons besoin de l'utilisateur.
‫Donc utilisateur, qui est à
‫la demande. utilisateur. identifiant.
‫Et enfin nous avons besoin du
‫prix,
‫qui est en tournée. le prix.
‫Très bien.
‫Maintenant, comme je l'ai déjà dit,
‫ce n'est bien sûr pas
‫du tout sécurisé car pour
‫le moment, toute personne connaissant cette structure d'URL ici pourrait
‫simplement l'appeler sans passer par le processus de paiement, n'est-ce pas ?
‫Et donc tout le monde
‫pouvait vraiment réserver une visite sans avoir à payer.
‫Tout ce qu'ils auraient à faire serait d'ouvrir cette
‫URL avec la visite, l'utilisateur et
‫le prix, puis ils créeraient automatiquement une nouvelle réservation
‫sans même payer, d'accord ?
‫Encore une fois, ce n'est pas vraiment sécurisé, mais pour
‫l'instant, en tant que solution de
‫contournement, cela fonctionne très bien car peu de gens sauront
‫bien sûr que c'est notre URL de réussite.
‫D'accord?
‫Parce qu'en fait, nous allons cacher ce fait
‫un peu dans une seconde, d'accord ?
‫Créons donc maintenant la fonction qui créera réellement la nouvelle réservation dans la
‫base de données.
‫Cela va donc exporter le paiement par
‫dot create booking et cela
‫s'appelle créer un paiement de réservation car plus tard, nous
‫aurons également créer une
‫réservation, qui sera alors accessible
‫depuis notre API
‫de
‫réservation.
‫Très bien.
‫En tous cas.
‫Ici comme toujours.
‫Et commençons par récupérer nos données à partir de la chaîne de requête.
‫Et donc pour cela je vais utiliser la structuration.
‫La
‫visite, l'utilisateur et
‫le prix sont donc disponibles sur demande. requete.
‫Alors n'oubliez pas qu'il s'agit de la chaîne de requête.
‫Ensuite, nous ne voulons créer une nouvelle
‫réservation que si tous ces éléments sont spécifiés ici.
‫Et donc fondamentalement, nous disons que s'ils n'existent pas, nous passons
‫au middleware suivant.
‫C'est donc notre procédure très standard, n'est-ce pas ?
‫Donc on dit que s'il
‫n'y a pas
‫de tournée et pas d'utilisateur
‫et pas de prix.
‫Donc, fondamentalement, nous exigeons que tout existe sur eux.
‫Et donc dans ce cas, nous passons
‫au middleware suivant.
‫Maintenant, quel est exactement le prochain middleware ?
‫N'oubliez pas que
‫nous souhaitons créer une nouvelle réservation sur cette URL d'accueil.
‫Alors celui-ci ici.
‫Car encore une fois, c'est l'URL
‫qui est appelée chaque fois qu'un achat est réussi avec Stripe.
‫Et donc ce que nous devons faire est d'ajouter cette fonction middleware que nous créons
‫en ce moment sur la pile middleware de
‫ce gestionnaire de route.
‫Alors, de quel gestionnaire de route s'agit-il ?
‫Bon c'est en vue des routes
‫et c'est celle-ci, non ?
‫Cela semble donc probablement un peu déroutant.
‫Mais encore une fois, c'est la
‫route qui sera empruntée lorsqu'une carte de crédit est débitée avec succès.
‫Et c'est donc aussi le moment où nous voulons créer une
‫nouvelle réservation.
‫Et c'est ici que nous devons
‫ajouter cette fonction middleware, alors faisons-le et exigeons
‫notre contrôleur et maintenant
‫nous allons simplement dupliquer cela ici.
‫Donc le contrôleur de réservation et
‫maintenant je vais en fait éditer ici dès le début car cela n'a pas vraiment d'importance
‫si nous sommes connectés ou non pour cela.
‫Donc bookingcontroller. get, ou
‫dot create
‫bookingcheckout.
‫Faites une sauvegarde
‫et d'accord.
‫Et encore une fois, c'est ici juste un
‫peu temporaire jusqu'à ce que nos sites Web
‫soient déployés sur
‫un serveur où nous pourrons alors créer une meilleure solution pour cela.
‫D'accord?
‫Donc, ici, dans le contrôleur de réservation,
‫il est maintenant temps de créer réellement cette nouvelle réservation.
‫Et donc en fait, nous devons maintenant importer ce modèle.
‫Alors faisons-le ici.
‫Réservation et
‫modèle de réservation ici aussi.
‫Et pour une raison quelconque, j'ai ici ces chemins étranges.
‫Donc ça n'a aucun sens.
‫Je ne sais pas pourquoi je les ai écrits comme ça à l'époque.
‫Donc, ce que nous avons là-bas est exactement le même que celui-ci.
‫Mais bien sûr, c'est plus lisible.
‫En tous cas.
‫Créons maintenant cette réservation.
‫Et donc pour cela il
‫faudra attendre la réservation. créer avec un
‫objet
‫de tournée, d'utilisateur et de prix.
‫Et c'est tout.
‫Maintenant, nous devons également marquer
‫celui-ci ici comme asynchrone et comme
‫toujours catchasync.
‫D'accord?
‫Et nous n'enregistrons pas bien cela
‫dans une variable car nous n'en avons pas vraiment besoin.
‫Nous n'allons pas renvoyer cela en tant que réponse API.
‫À ce stade, tout ce que nous voulons faire ici, c'est
‫créer ce nouveau document, d'accord ?
‫Ensuite,
‫nous pourrions dire ensuite, comme ceci.
‫Et donc ça irait ensuite
‫au middleware suivant mais ce n'est pas vraiment l'idéal.
‫Gardez donc à nouveau à l'esprit que le prochain middleware
‫de la pile est bien sûr
‫celui-ci et la vue d'ensemble.
‫Donc, fondamentalement, la
‫fonction qui va rendre notre page.
‫Mais rappelez-vous que cette URL est tout cela.
‫Donc tout ça avec toutes ces données ici.
‫Et encore une fois, ce n'est pas du tout sécurisé.
‫Et au moins, rendons-le
‫un peu plus sûr, d'accord ?
‫Et donc
‫ce que nous pouvons faire ici est de rediriger
‫l'application maintenant uniquement vers cette URL.
‫Et donc, en gros, vous
‫supprimez la chaîne de requête de l'URL d'origine.
‫Et donc en fait,
‫nous allons maintenant utiliser quelque chose que nous n'avons jamais utilisé auparavant.
‫Alors c'est super, non ?
‫Nous allons donc utiliser la redirection.
‫Très bien?
‫Alors maintenant, ce que
‫nous voulons, c'est l'URL entière, mais sans la chaîne de requête.
‫Donc, ce que nous
‫pourrions faire, c'est
‫simplement tricher et copier ceci ici.
‫Mais rendons-le un peu plus élégant.
‫Donc, ce que nous faisons, c'est la demande. theoriginalurl, que nous avons déjà
‫utilisé auparavant.
‫Et c'est donc l'intégralité
‫de l'URL d'où provient la demande.
‫Et maintenant, ce que
‫nous devons faire, c'est le diviser par le point d'interrogation.
‫À droite?
‫Parce que c'est le diviseur entre la partie que nous
‫voulons réellement et la chaîne de requête.
‫Donc, si nous divisons cela par le point d'interrogation,
‫nous aurons un tableau où le premier
‫élément est celui-ci et le deuxième élément est tout le reste.
‫Donc la chaîne de requête elle-même.
‫Et donc
‫ici, nous prenons le premier élément et c'est donc notre page d'accueil.
‫Donc l'url de notre itinéraire.
‫Et ce que fait la redirection ici, c'est essentiellement de créer une nouvelle
‫demande mais vers cette nouvelle URL que nous avons transmise là-bas.
‫Très bien?
‫Cela va donc maintenant créer
‫une autre demande vers notre URL de route.
‫Nous allons donc reprendre cette route.
‫Et donc une fois de plus, nous allons toucher ce middleware ici.
‫Donc celui que nous venons de créer.
‫Donc, pour la deuxième fois, nous allons toucher cela, mais maintenant le tour, l'utilisateur et le prix
‫ne sont plus définis.
‫Et puis nous passerons au middleware suivant, qui est finalement
‫la fonction de
‫gestionnaire d'aperçu, que nous allons ensuite simplement rendre la page d'accueil, d'accord ?
‫Fait sens?
‫C'est donc un peu circulaire.
‫Donc, fondamentalement, au début,
‫nous allons emprunter cette voie ici.
‫Ensuite, une nouvelle réservation est
‫créée ici et nous redirigeons à nouveau l'application
‫vers cet itinéraire, cette fois sans la chaîne de requête.
‫Et donc sans
‫la chaîne de requête et ce middleware,
‫nous sommes passés directement au suivant.
‫Et ce n'est qu'alors que
‫nous arrivons à nous connecter et à obtenir une vue d'ensemble.
‫Très bien?
‫Et c'est donc ça en fait, d'accord ?
‫Eh bien, c'est juste ici que
‫ce n'est que temporaire car
‫ce n'est pas sécurisé.
‫Tout le monde peut réserver
‫sans payer.
‫Encore une fois, ce serait terrible pour l'entreprise.
‫Bon, maintenant il est temps de tester ça.
‫Et donc en fait, je veux le faire avec cet autre utilisateur que nous avons créé
‫qui est jonas@mailsac.
‫Et c'est parce
‫que je veux voir si nous obtenons réellement ce reçu par e-mail de Stripe.
‫Connectons-nous donc
‫avec cet utilisateur sur notre site Web.
‫Alors déconnectez-vous.
‫Eh bien ça ne marche pas.
‫C'est bizarre.
‫Rechargeons.
‫Et cela devrait fonctionner, alors voyons si nous avons une erreur
‫dans notre javascript.
‫Parce que c'est en fait face au client et nous obtenons
‫que Stripe n'est pas défini.
‫Voyons si nous avons la même erreur ici sur cette page,
‫ce que nous ne devrions pas, n'est-ce pas ?
‫Et en fait
‫ce n'est pas là, mais de retour sur toutes les tournées.
‫Ouais, c'est là.
‫Donc, la solution à cela est
‫de le déplacer de la tournée vers toutes les pages.
‫Très bien?
‫Donc, pour une raison quelconque, le groupeur de
‫colis le fait de sorte qu'il doit être ici dans la
‫portée principale pour tous.
‫Donc pour toutes les pages, d'accord ?
‫Donc, en fait, mettons cela en bas juste
‫avant notre paquet.
‫Très bien?
‫Essayez à nouveau et maintenant nous sommes prêts à partir.
‫Alors
‫déconnectez-vous et cela a fonctionné.
‫Connectez-vous maintenant.
‫Bien sûr, maintenant notre copie est partie.
‫Un deux trois quatre.
‫Non, ce n'est pas correct.
‫Testez un deux trois quatre.
‫Donc je suppose que j'ai changé le mot de passe à un moment donné, alors essayons
‫un nouveau mot de passe,
‫qui ne fonctionne pas non plus.
‫Essayons de passer un deux trois quatre et
‫cela a fonctionné.
‫Il ne s'agit donc pas de tester un
‫deux trois quatre, mais de réussir un deux trois quatre.
‫Au moins ici dans mon cas.
‫Essayons donc de réserver le disons
‫le sportif.
‫Très bien.
‫Ici.
‫Réservez une tournée et cela
‫fonctionne toujours et c'est le
‫plus cher.
‫(rires) Donc quatre deux quatre deux
‫puis quatre deux jusqu'à
‫la fin.
‫Alors voici un mois et voici un certain nombre.
‫Disons mon nom
‫entier ici et maintenant, payons.
‫Et je vais jeter un œil à la barre d'URL.
‫Et en effet, nous obtenons notre
‫page d'accueil donc notre URL de route sans aucune des chaînes de requête que nous avons spécifiées auparavant.
‫Cela signifie donc que quelque chose fonctionne.
‫Jetons donc un coup d'œil à la boussole et cliquez ici pour
‫recharger et nous obtenons notre collection de réservations.
‫Et c'est bon signe.
‫Et en effet, nous y voilà.
‫Notre tout premier document est créé.
‫Alors rappelez-vous que c'était ce prix.
‫Jetons également un œil à l'identifiant de
‫l'utilisateur qui est celui-ci se terminant par huit E trois B.
‫Donc huit E trois B, c'est exact.
‫Et je suppose que la tournée sera également correcte.
‫Tellement parfait.
‫Cela a également fonctionné et nous avons maintenant vraiment un
‫moyen de créer des réservations chaque
‫fois qu'une réservation se produit avec Stripe.
‫Jetons également un coup d'œil rapide à nos tableaux de bord ici.
‫C'est vraiment amusant.
‫Et je suppose que je dois juste recharger ici.
‫Voyons donc.
‫Voici Jonas, quel que soit son nom.
‫Nous avons l'amateur
‫de
‫sport et parfait.
‫Cela fonctionne maintenant.
‫Et la tâche finale.
‫Voyons maintenant mailsac.
‫Sac de courrier.
‫com et voir si j'ai
‫reçu mon e-mail là-bas.
‫Et bien en fait je ne l'ai pas
‫fait, mais ce n'est pas grave.
‫Je ne suis pas sûr que cela ne fonctionne tout simplement pas avec les données de test.
‫Et donc pour l'instant c'est tout ce
‫que j'ai à vous montrer sur l'intégration de Stripe.
‫Encore une
‫fois, une fois le site Web déployé, nous utiliserons alors
‫les Webhooks Stripe afin
‫de créer des réservations de manière plus sécurisée et bien meilleure.
‫Très bien?
‫Prenons donc à nouveau une minute pour récapituler ce que nous avons fait ici.
‫Donc, fondamentalement, nous avons ajouté
‫toutes les variables dont nous avons besoin pour
‫créer une nouvelle réservation à l'URL de réussite.
‫Ensuite, nous avons ajouté une nouvelle fonction
‫middleware ici à la pile de cette route exacte.
‫Alors celui-ci ici.
‫Et ainsi, chaque
‫fois que cette URL est touchée, nous essaierons de créer une nouvelle réservation.
‫Très bien?
‫Mais cette nouvelle réservation n'est bien sûr créée que lorsque le tour, l'utilisateur et le
‫prix sont spécifiés dans la requête.
‫Et donc dans cette fonction middleware, s'ils sont bien spécifiés
‫sur la requête, nous créons une
‫nouvelle réservation ici.
‫Ensuite, une fois cela fait, nous supprimons la chaîne de requête de
‫l'URL afin de rendre l'ensemble du processus un peu moins transparent
‫pour l'utilisateur.
‫Fondamentalement, toute la chaîne de
‫requête n'apparaît pas dans la barre d'URL de notre navigateur.
‫Et puis ici, nous redirigeons
‫notre application vers cette nouvelle URL de route ici, d'accord ?
‫Et ainsi, ce middleware ici sera
‫ignoré et notre page d'accueil normale sera simplement rendue.
‫Très bien?
‫Débarrassons-nous simplement de cette erreur d'application ici
‫et de l'usine dont nous aurons réellement besoin dans la prochaine conférence.
‫Donc, dans cette prochaine conférence, nous allons nous
‫occuper de la mise en œuvre d'un dernier élément de notre
‫site Web, qui est essentiellement cette page ici pour mes réservations.
‫Et ce que cette page fera, c'est d'afficher essentiellement une carte
‫de visite pour chacune des visites que nous avons réservées.
‫Cela ressemble
‫donc beaucoup à cette page d'accueil, mais uniquement
‫avec les visites que l'utilisateur actuellement connecté a réservées, d'accord ?
‫C'est donc une fonctionnalité intéressante pour un site Web, n'est-ce pas ?
‫Et alors prenons-en soin dans le prochain.