‫Narrateur : Dans cette
‫vidéo, nous allons utiliser une astuce simple pour
‫empêcher les utilisateurs d'écrire plusieurs critiques pour les mêmes visites,
‫évitant ainsi essentiellement les critiques en double.
‫Donc dans la dernière vidéo, nous avons créé toutes ces
‫revues afin de calculer les moyennes.
‫Et nous avons créé plusieurs avis pour une
‫tournée, mais tous du même utilisateur.
‫Mais en pratique, ça n'a pas beaucoup de sens, non ?
‫Ainsi, dans le monde réel, chaque
‫utilisateur ne devrait revoir chaque visite qu'une seule fois.
‫Donc, fondamentalement, un avis en double se produit lorsqu'il y
‫a un avis avec le même utilisateur et
‫le même ID de tournée.
‫Et c'est ce que nous voulons éviter de se produire.
‫Et la solution évidente ici
‫est d'utiliser simplement un index unique, n'est-ce pas ?
‫Cependant, il ne suffit pas
‫de définir ces deux champs sur uniques.
‫Et en fait, ce serait vraiment faux,
‫car cela signifierait que chaque visite ne peut obtenir qu'un avis et
‫que chaque utilisateur ne peut écrire qu'un seul avis.
‫Et évidemment ce n'est pas ce que nous voulons.
‫Donc, ce dont nous avons besoin, c'est qu'ils soient tous les deux
‫uniques, de sorte que la combinaison de l'utilisateur et de la tournée soit toujours unique.
‫Cela semble donc un peu compliqué, mais heureusement pour
‫nous, c'est en fait très facile à réaliser avec des index.
‫Nous avons donc déjà créé un indice composé sur la tournée auparavant, et
‫faisons maintenant la même chose ici sur les critiques.
‫Encore une fois, juste ici après la définition du schéma, et
‫bien sûr, nous sommes toujours dans le modèle de révision, n'est-ce pas ?
‫Alors révisez, et ce n'est pas
‫correct, alors révisez l'index de points du schéma...
‫Tour fixé à un, et encore une fois ce n'est pas vraiment important si c'est
‫un ou moins un dans ce cas.
‫Et l'utilisateur a également défini sur un, d'accord.
‫Et encore une fois, c'est similaire à ce
‫que nous avons fait auparavant, mais ici, nous allons passer
‫au niveau supérieur et ajouter maintenant un objet pour les options.
‫Et l'option que nous allons définir ici est
‫unique (saisie) définie
‫sur true.
‫Et c'est en fait ça.
‫Cela permettra d'atteindre exactement ce que nous voulons.
‫Alors maintenant, chaque combinaison de visite et d'utilisateur
‫doit toujours être unique.
‫Alors faisons une sauvegarde
‫ici, ou deux, puis testons cela en fait.
‫Maintenant, lorsque j'ai testé cela pour la
‫première fois, cela n'a pas fonctionné tout de suite.
‫Vraiment, ça n'a commencé à fonctionner que le lendemain, et je
‫ne sais pas vraiment pourquoi, mais si cela vous arrive, alors
‫ne vous inquiétez pas pour ça, d'accord.
‫Et peut-être que cela pourrait même arriver
‫maintenant que j'enregistre cette vidéo.
‫Donc de toute façon, pour le moment, il ne devrait pas y avoir de critiques
‫sur la tournée sur laquelle nous travaillions.
‫Donc, juste pour nous assurer que nous avons toujours des
‫notes nulles et que les critiques sont vides.
‫Et donc créons à
‫nouveau une nouvelle critique sur cette tournée.
‫D'accord.
‫Il s'agit donc d'un avis, donc d'un utilisateur et d'un avis.
‫Donc, bien sûr, cela devrait fonctionner, mais si je l'envoie maintenant à nouveau
‫et disons que je le mets à quatre et que je dis d'accord, alors
‫cela ne devrait pas être autorisé à fonctionner, d'accord.
‫Gardez juste à l'esprit que cela pourrait toujours
‫fonctionner à cause du problème que je vous ai dit auparavant, d'accord.
‫Parfois, ce type d'index n'est pas défini immédiatement.
‫Oh, mais en fait, dans mon cas ici, cela a fonctionné tout de suite.
‫Nous obtenons donc cette erreur de clé en double sur cet index ici,
‫et c'est donc exactement l'index que nous venons de créer auparavant.
‫Jetons donc un coup d'œil à cela également ici dans Compass.
‫Donc ici, ce n'est pas le cas,
‫et je vais donc le faire comme je l'ai
‫fait avant et me reconnecter essentiellement.
‫Alors allez aux récents, puis connectez-vous ici.
‫Natours...
‫Puis...
‫Bien sûr les
‫tournées, et nos index ici sont maintenant ces quatre-là.
‫Et donc c'est celui que nous venons
‫de créer, ou en fait ce n'est pas le cas (rires), d'accord.
‫Donc, pour une raison quelconque, ce n'est pas ici,
‫c'est donc ce que je disais plus tôt,
‫mais cela ne vous dérange pas car en fait, cela fonctionne dans notre code.
‫D'accord, nous n'avons donc pas pu créer deux avis
‫provenant du même utilisateur, d'accord.
‫Mais si vous vous connectez maintenant
‫en tant que quelqu'un d'autre, eh bien, nous pourrons certainement publier cet avis.
‫Voyons donc quel utilisateur nous pourrions utiliser maintenant.
‫Alors rassemblons tous les utilisateurs ici, ce que je ne
‫peux pas parce que je ne suis pas un administrateur (rires), d'accord.
‫J'ai donc oublié cette partie,
‫et je vais donc simplement la récupérer dans Compass.
‫Parfois, c'est juste plus facile.
‫C'est donc un guide, un
‫utilisateur (s'exclame), alors utilisons simplement cet Eduardo ici ou quelque chose.
‫Alors connectons-nous en tant que cette personne, en tant que cet utilisateur.
‫Oui, avec succès, et maintenant nous devrions
‫être autorisés à créer une critique, et en effet, la voici, d'accord.
‫Et si nous
‫mettons maintenant cela à jour, alors nous avons nos deux notes, super.
‫Maintenant, testez-le à nouveau, donc si nous l'envoyons
‫à nouveau, cela ne fonctionnera pas car, encore une fois,
‫nous avons une erreur en double.
‫Impressionnant.
‫Il y a juste une autre chose
‫que je voulais vous montrer, et donc pour cela, je vais me
‫connecter en tant qu'autre personne, d'accord, afin que je puisse ensuite créer une autre critique.
‫Alors cette fois, je serai ce Max Smith.
‫Et donc connectons-nous.
‫(clics de
‫souris) Bon, maintenant je suis officiellement Max,
‫et je pourrai poster cette critique.
‫Donc avec cinq,
‫je suis capable de faire
‫ça, et maintenant je veux jeter un œil à la moyenne.
‫Bon, maintenant c'est ce 4. 6666, ce qui bien
‫sûr n'a pas l'air bien.
‫Et nous pourrions résoudre ce problème en amont.
‫Par exemple, lorsque nous demandons ces données à
‫l'API et que nous les affichons,
‫nous pourrions ensuite effectuer cet arrondi sur le front-end.
‫Mais en fait, je veux le faire ici même sur le
‫back-end afin que l'utilisateur final obtienne déjà cette valeur arrondie finale, qui dans
‫ce cas serait de 4. 7, non ?
‫Et pour cela, je vais vous montrer une petite nouveauté
‫dans Mongoose que nous n'avons pas encore utilisée.
‫Passons donc à notre modèle de tournée,
‫et à cette moyenne,
‫donc ici.
‫Et maintenant, nous pouvons utiliser une fonction setter.
‫(en tapant) Donc défini
‫et cette fonction sera exécutée chaque fois qu'une
‫nouvelle valeur est définie pour ce champ, d'accord.
‫Et donc ici, nous spécifions généralement une fonction de rappel, qui
‫reçoit la valeur actuelle.
‫Et dans ce cas, il renvoie essentiellement cette valeur,
‫mais arrondie.
‫Nous utilisons donc l'arrondi par points mathématiques pour la valeur actuelle, mais le problème
‫avec l'arrondi par points mathématiques est
‫qu'il arrondit les valeurs à des nombres entiers.
‫Donc, par exemple, si nous avions quelque
‫chose comme ça, cela arrondirait alors à cinq, d'accord.
‫Et ce n'est pas ce que nous voulons.
‫Nous voulons qu'il soit arrondi à 4. 7.
‫Et donc nous allons
‫utiliser une astuce ici, qui est assez courante, donc en multipliant cela par 10, et
‫donc avec cela, nous obtiendrions 46. 666, et
‫alors cet arrondi serait 47.
‫Et donc, nous divisons à nouveau les résultats par 10, et cela
‫fait alors 4. 7.
‫Très bien, et c'est en fait tout.
‫Encore une fois, une fonction de réglage ici qui
‫va être exécutée chaque fois qu'il y a une nouvelle valeur
‫pour le champ de moyenne des notes.
‫Donc, juste pour tester cela, mettons simplement à jour cette
‫dernière critique que nous avons ajoutée, qui avait
‫un cinq, et gardons-la à cinq.
‫Donc, tout ce que nous voulons faire, c'est
‫réexécuter cette fonction qui crée cette moyenne.
‫Donc, si je fais ça maintenant et maintenant ma tournée, nous
‫devrions en avoir 4. 7 ici comme moyenne.
‫Et oui, on y va.
‫Super, et c'est déjà tout pour cette vidéo.
‫Nous avons donc créé cette fonction de setter
‫agréable, et nous avons créé cet index composé unique
‫ici afin de garantir qu'un utilisateur
‫ne peut pas écrire plusieurs critiques pour la même tournée.