‫Enseignant :
‫Alors rappelez-vous comment dans la
‫vidéo sur notre modèle de
‫données, nous avons dit
‫que nous pouvions soit intégrer, soit
‫référencer les données du guide touristique.
‫Encore une fois, dans cette conférence, nous
‫allons intégrer des documents utilisateur dans des documents de visite, puis
‫dans la vidéo suivante, je
‫vais vous montrer comment nous pouvons réellement
‫référencer les utilisateurs au lieu d'intégrer, d'accord ?
‫L'idée ici est donc que lors de la
‫création d'un nouveau document de tournée, l'utilisateur ajoutera
‫simplement un tableau d'ID utilisateur, et nous obtiendrons ensuite
‫les documents utilisateur correspondants en fonction de
‫ces ID, et les
‫ajouterons à nos documents de tournée.
‫Donc, en d'autres termes, nous les intégrons dans notre tournée, d'accord ?
‫Alors, faisons-le ici maintenant.
‫Les guides seront donc du type tableau, d'accord ?
‫Très simple, et en fait avant d'implémenter un
‫code, laissez-moi vous montrer, à titre d'exemple,
‫comment cela fonctionnerait lors de la création d'une nouvelle visite.
‫Alors, revenons à Postman ici,
‫et créons une nouvelle tournée, d'accord,
‫et donc ici
‫dans notre corps, nous allons bien sûr ajouter les
‫guides, les citations, puis spécifier un tableau d'ID, d'accord ?
‫Alors, obtenons quelques identifiants d'utilisateur.
‫Alors, obtenez tous les utilisateurs, voyons ce que nous avons ici.
‫Nous avons donc un guide ici,
‫en fait, et obtenons donc
‫cet ID avec les guillemets,
‫en fait, et
‫mettons-le ici, et ajoutons-en d'autres.
‫Donc, ceci ici aussi et en fait juste ces deux-là.
‫Cela devrait suffire pour tester ce truc, d'accord, et c'est ainsi que nous
‫allons créer une nouvelle
‫visite avec deux guides, d'accord, et encore une
‫fois, nous avons sauvegardé cette visite, nous
‫allons ensuite, dans
‫les coulisses, récupérer le
‫deux documents utilisateur correspondant à ces deux identifiants, d'accord ?
‫Alors, implémentons cela, et de retour
‫dans notre modèle,
‫le meilleur endroit pour le faire
‫est un middleware pré-enregistré, n'est-ce pas ?
‫Donc, ça se fera automatiquement en coulisses, en
‫gros, à chaque
‫fois qu'une nouvelle tournée est enregistrée, et en fait, je
‫ne veux pas le faire ici.
‫Nous avons donc une requête,
‫ici, voici le document "Middleware",
‫alors faisons-le ici.
‫Alors tourSchema. pre,
‫D'accord, appelons le suivant tout de suite ici, pour
‫ne pas l'oublier à la fin.
‫D'accord, alors nous obtenons ceci. guides en tant qu'entrée, et rappelez-vous que ce sera
‫un tableau de tous les identifiants d'utilisateur,
‫à droite, et nous allons donc les parcourir en boucle à
‫l'aide d'un fichier . map, puis
‫à chaque itération, obtenez le
‫document utilisateur pour l'ID actuel, d'accord,
‫et nous allons le stocker dans des guides, d'accord ?
‫Donc, l'élément actuel, qui va être l'ID, eh
‫bien appelons-le ID
‫pour le rendre un peu plus
‫facile à comprendre, et maintenant nous avons réellement besoin de
‫l'utilisateur, d'accord, alors allons-y et importons-le.
‫Donc, const User,
‫require, et
‫c'est en fait dans le même dossier ici, d'accord, donc
‫User. findByID
‫avec l'ID actuel, d'accord ?
‫Mais maintenant, gardez à l'esprit
‫que nous devons en fait attendre cette promesse ici, et donc, par
‫conséquent, la fonction doit être
‫marquée comme asynchrone, mais
‫maintenant nous avons un problème, d'accord, car
‫le fichier . map méthode affectera
‫le résultat de chaque itération au nouvel élément dans
‫le tableau guides, d'accord, et maintenant nous
‫avons une fonction asynchrone ici
‫et, comme vous le savez, qui renvoie
‫une promesse, et donc maintenant ce
‫tableau guides ici est essentiellement un tableau plein de promesses, d'accord.
‫Appelons cela guidesPromises et nous
‫devons donc maintenant exécuter
‫toutes ces promesses, essentiellement en même temps.
‫Comme je vous l'ai montré un peu plus
‫tôt dans ce code, au moins
‫si vous n'avez pas ignoré la section JavaScript asynchrone,
‫tout ce que nous avons à faire est d'attendre Promise. all puis guidesPromise, d'accord,
‫et nous pouvons directement
‫attribuer le résultat de ceci
‫à this. guides, et donc fondamentalement
‫remplacer ce tableau d'ID de temple par
‫un tableau de documents utilisateur, d'accord, et puisque nous utilisons
‫maintenant wait ici,
‫nous devons marquer cette fonction comme async, d'accord ?
‫Faites une sauvegarde, et je pense que c'est en fait ça, d'accord ?
‫Encore une fois, nous devons utiliser Promise. tout ici parce
‫que le résultat de tout cela ici est une promesse, d'accord,
‫et donc ce tableau ici va être un
‫tableau plein de promesses que nous
‫exécuterons ensuite en attendant Promise. tout va bien?
‫Alors, testons cela maintenant, et
‫nous avons déjà tout ce code prêt ici, nous
‫devrions simplement changer ce nom ici.
‫Donc, 'Test Tour', mais les identifiants sont déjà là.
‫Alors envoyons ceci, et le nom de notre tournée doit être
‫plus long, 'New Task Tour'. « D'accord,
‫mais maintenant, jetons un coup d'œil à nos résultats, et
‫nous avons donc effectivement nos guides ici, d'accord ?
‫Ce sont donc les documents complets,
‫et pas seulement les pièces d'identité, n'est-ce pas ?
‫Génial, et c'est ainsi
‫que nous pourrions implémenter l'intégration pour cet exemple de guides touristiques.
‫Maintenant, ce code simple que nous avons implémenté ici
‫ne fonctionne bien sûr que pour créer de nouveaux documents, pas pour
‫les mettre à jour, n'est-ce pas ?
‫Alors maintenant, nous devrions aller de
‫l'avant et implémenter cette même logique également pour les mises à jour.
‫Cependant, je ne vais pas le faire
‫car, rappelez-vous de la vidéo où nous avons modélisé nos
‫données, qu'il y a en fait
‫des inconvénients à intégrer ces données dans ce cas.
‫Par exemple, imaginez qu'un guide touristique
‫met à jour son adresse e-mail ou qu'il
‫change son rôle de guide à guide principal.
‫Chaque fois que l'un de ces changements se produirait, vous devriez
‫alors vérifier si une visite a cet utilisateur
‫comme guide, et si c'est le cas, mettre à
‫jour la visite également, et donc c'est
‫vraiment beaucoup de travail et nous ne
‫sommes pas va
‫aller dans cette direction, d'accord?
‫Maintenant, je voulais toujours vous montrer comment
‫l'intégration fonctionne vraiment
‫et comment nous pourrions l'implémenter dans
‫cette situation, car je pense vraiment qu'il est
‫très important que vous sachiez toujours comment
‫tout faire au cas où
‫vous en auriez besoin dans vos
‫propres applications, d'accord, mais dans cette
‫situation particulière, au lieu d'intégrer, nous utiliserons le référencement,
‫et j'ai expliqué les raisons de
‫le faire dans cette vidéo, d'accord ?
‫Alors, allons de l'avant et faisons cela
‫correctement dans la prochaine conférence.