‫Narratore: In questo
‫video utilizzeremo un semplice trucco per impedire agli
‫utenti di scrivere più recensioni per gli stessi tour,
‫quindi in pratica evitando recensioni duplicate.
‫Quindi nell'ultimo video abbiamo creato tutte queste
‫recensioni per calcolare le medie.
‫E abbiamo creato più recensioni per un tour,
‫ma tutte dallo stesso utente.
‫Ma in pratica non ha molto senso, no?
‫Quindi, nel mondo reale, ogni
‫utente dovrebbe rivedere ogni tour solo una volta.
‫Quindi, in pratica, si verifica una recensione duplicata quando
‫c'è una recensione con lo stesso utente e
‫lo stesso ID tour.
‫Ed è quello che vogliamo evitare che accada.
‫E la soluzione ovvia
‫qui è usare solo un indice univoco, giusto?
‫Tuttavia, non è sufficiente
‫impostare entrambi questi campi su univoco.
‫E in realtà sarebbe davvero molto
‫sbagliato, perché ciò significherebbe che ogni tour può ottenere solo una recensione
‫e ogni utente può scrivere solo una recensione.
‫E ovviamente non è quello che vogliamo.
‫Quindi ciò di cui abbiamo bisogno è che entrambi insieme siano
‫unici, in modo che la combinazione di utente e tour sia sempre unica.
‫Quindi sembra un po' complicato, ma fortunatamente per
‫noi, in realtà è molto facile da ottenere con gli indici.
‫Quindi abbiamo già creato un indice composto sul tour prima, e quindi
‫ora facciamo lo stesso qui sulle recensioni.
‫Quindi di nuovo, proprio qui dopo la definizione dello
‫schema, e ovviamente siamo ancora nel modello di revisione, giusto?
‫Quindi rivedi, e questo non è
‫corretto, quindi rivedi lo schema dot index...
‫Tour impostato su uno, e ancora una volta non è molto importante se in
‫questo caso è uno o meno uno.
‫E anche l'utente è impostato su uno, ok.
‫E così di nuovo, è simile a quello
‫che abbiamo fatto prima, ma qui lo porteremo al
‫livello successivo e ora aggiungeremo un oggetto per le opzioni.
‫E l'opzione qui che imposteremo è univoca
‫(digitazione) impostata su
‫true.
‫Ed è proprio così.
‫Questo otterrà esattamente ciò che vogliamo.
‫Quindi ora ogni combinazione di tour e utente
‫deve essere sempre unica.
‫Quindi diamogli un salvataggio qui,
‫o due, e poi andiamo a testarlo in realtà.
‫Ora, quando l'ho testato per la
‫prima volta, in realtà non ha funzionato subito.
‫Davvero, ha iniziato a funzionare solo il giorno
‫dopo, e non sono sicuro del perché, ma se
‫succede a te, non preoccuparti, ok.
‫E forse potrebbe succedere anche adesso che
‫sto registrando questo video.
‫Comunque, in questo momento, non dovrebbero esserci recensioni sul tour
‫a cui stavamo lavorando.
‫Quindi, solo per assicurarci di avere ancora zero
‫valutazioni e anche le recensioni sono vuote.
‫E quindi creiamo ancora una
‫volta una nuova recensione su questo tour.
‫Va bene.
‫Quindi questa è una recensione, quindi un utente e una recensione.
‫Quindi, ovviamente, dovrebbe funzionare, ma se ora lo mando
‫di nuovo e diciamo che lo imposto a quattro e
‫dico okay, allora non dovrebbe funzionare, okay.
‫Tieni presente che potrebbe ancora funzionare
‫a causa del problema che ti dicevo prima, ok.
‫Quindi a volte questo tipo di indice non viene impostato immediatamente.
‫Oh, ma in realtà, nel mio caso qui ha funzionato subito.
‫Quindi otteniamo questo errore di chiave duplicata su questo indice qui, e
‫quindi questo è esattamente l'indice che abbiamo appena creato prima.
‫Quindi diamo un'occhiata anche qui in Compass.
‫Quindi qui in realtà non lo
‫è, quindi lo farò proprio come ho
‫fatto prima e ricollegherò sostanzialmente.
‫Quindi andando ai recenti, quindi collegandosi qui.
‫Naturisti...
‫Quindi...
‫Ovviamente i tour
‫e i nostri indici qui ora sono questi quattro.
‫E quindi è quello che
‫abbiamo appena creato, o in realtà non lo è (ride), okay.
‫Quindi, per qualche ragione, non è qui,
‫quindi è proprio quello che stavo
‫dicendo prima, ma non importa perché in realtà funziona nel nostro codice.
‫Ok, quindi non siamo stati in grado di creare due
‫recensioni provenienti dallo stesso utente, ok.
‫Ma se ora accedi come
‫qualcun altro, beh, allora saremo sicuramente in grado di pubblicare questa recensione.
‫Quindi vediamo quale utente potremmo usare ora.
‫Quindi portiamo qui tutti gli utenti, cosa che
‫non posso perché non sono un amministratore (ride), ok.
‫Quindi ho dimenticato quella
‫parte, e quindi lo recupererò semplicemente da Compass.
‫A volte è semplicemente più facile.
‫Quindi questa è una guida,
‫un utente (esclama), quindi usiamo questo Eduardo qui o qualcosa del genere.
‫Quindi accediamo come questa persona, come questo utente.
‫Sì, con successo, e ora dovremmo essere
‫autorizzati a creare una recensione, e in effetti eccola qui, ok.
‫E se
‫ora lo aggiorniamo, avremo le nostre due valutazioni, fantastico.
‫Ora lo stiamo testando di nuovo, quindi
‫se lo inviamo di nuovo, non funzionerà perché di
‫nuovo, abbiamo un errore duplicato.
‫Stupendo.
‫C'è solo un'altra cosa
‫che volevo mostrarti, quindi per questo, accederò come
‫un'altra persona, ok, in modo da poter creare un'altra recensione.
‫Quindi questa volta sarò questo Max Smith.
‫E quindi accediamo.
‫(clic del
‫mouse) Ok, ora sono ufficialmente Max
‫e potrò pubblicare questa recensione.
‫Quindi con
‫cinque, sono in grado
‫di farlo, e ora voglio dare un'occhiata alla media.
‫Ok, quindi in questo momento è questo 4. 6666, che ovviamente
‫non ha un bell'aspetto.
‫E potremmo sistemare questo nel front-end.
‫Ad esempio, quando richiediamo questi dati
‫dall'API e poi li
‫visualizziamo, potremmo fare questo arrotondamento sul front-end.
‫Ma in realtà, voglio farlo proprio qui sul back-end
‫in modo che l'utente finale ottenga già questo valore arrotondato finale, che
‫in questo caso sarebbe 4. 7, giusto?
‫E per farlo, ti mostrerò una piccola nuova funzionalità
‫in Mongoose che non abbiamo ancora usato.
‫Quindi andiamo al nostro modello di tour,
‫ea quella media, quindi
‫proprio qui.
‫E così ora, possiamo usare una funzione setter.
‫(digitando) Quindi imposta e
‫questa funzione verrà eseguita ogni volta che viene
‫impostato un nuovo valore per questo campo, ok.
‫E quindi qui, di solito specifichiamo una funzione di callback, che
‫riceve il valore corrente.
‫E in questo caso, restituisce sostanzialmente questo valore,
‫ma arrotondato.
‫Quindi usiamo math dot round per il valore corrente, ma il problema
‫con math dot round è
‫che arrotonda i valori a numeri interi.
‫Quindi, per esempio, se avessimo qualcosa
‫del genere, arrotonderemo questo a cinque, ok.
‫E non è quello che vogliamo.
‫Vogliamo che sia arrotondato a 4. 7.
‫E quindi useremo
‫un trucco qui, che è abbastanza comune, quindi moltiplicando questo per 10, e
‫quindi con quello, otterremmo 46. 666, e
‫quindi questo arrotondato sarebbe 47.
‫E quindi, dividiamo di nuovo i risultati per 10, e questo
‫è 4. 7.
‫Va bene, e in effetti è così.
‫Quindi, di nuovo, una funzione setter qui che
‫verrà eseguita ogni volta che c'è un nuovo valore per
‫il campo della media delle valutazioni.
‫Quindi, solo per testarlo, aggiorniamo semplicemente quest'ultima recensione
‫che abbiamo aggiunto, che aveva un
‫cinque, e teniamola a cinque.
‫Quindi tutto ciò che vogliamo fare è rieseguire
‫quella funzione che crea questa media.
‫Quindi se lo faccio ora e ora faccio il mio
‫tour, dovremmo ottenere 4. 7 qui come media.
‫E sì, ci siamo.
‫Fantastico, e in realtà è già tutto per questo video.
‫Quindi abbiamo creato questa simpatica funzione setter
‫e abbiamo creato questo indice composto univoco qui
‫per garantire che un utente
‫non possa scrivere più recensioni per lo stesso tour.