‫Istruttore: Va bene, e ora solo per finire
‫questa parte, creiamo alcune fabbriche per ottenere i documenti.
‫E iniziamo con getOne qui, ok?
‫Esportazioni. getOne, ma questo in realtà è un po'
‫più complicato, ed è perché abbiamo
‫un popolamento nel gestore getTour.
‫Quindi, diamo un'occhiata a questo.
‫Quindi, proprio qui, in questo, abbiamo questo popolano qui, che è
‫diverso da tutti gli altri
‫gestori di get nelle altre risorse, giusto?
‫Ma, beh, questo non
‫è davvero un problema perché ci permetteremo
‫semplicemente di passare un oggetto opzioni popolate nella nostra funzione getOne, ok?
‫Quindi, invece di passare semplicemente
‫nel modello, avremo anche popolato, quindi opzioni, va bene.
‫E così, da qui restituiremo la
‫normale funzione del gestore.
‫Quindi, andiamo avanti e copiamo di nuovo tutto questo,
‫va bene.
‫Quindi, non abbiamo bisogno di questo qui.
‫Poi ecco, come
‫sempre, il modello, ed eccolo doc.
‫Bene, in realtà qui, documento,
‫e qui, ancora una volta, dati pari a doc.
‫Ora, dobbiamo anche apportare alcune
‫modifiche qui ora a causa
‫di questo popolamento, quindi in pratica, creeremo prima
‫la query e poi, se c'è l'oggetto opzioni
‫di popolamento, lo
‫aggiungeremo alla query, e poi dal fine, attendi quella query, ok?
‫Ha senso?
‫Allora, traduciamo quello che ho appena detto.
‫Quindi, la query è semplicemente uguale a Model. findById, così,
‫giusto?
‫Quindi, se esiste un oggetto opzioni popola,
‫beh,
‫in tal caso,
‫la query sarà query. compilare con le opzioni di popolamento, ok?
‫E poi, finalmente aspettiamo la nostra query e
‫la salviamo nel documento.
‫Quindi, attendi la query proprio come questa, d'accordo.
‫E così, in realtà è così.
‫Quindi, questa logica che
‫abbiamo qui con non aspettare la query subito, ma
‫invece semplicemente salvarla in una variabile,
‫in modo che possiamo quindi, nel passaggio successivo, manipolarla.
‫In realtà abbiamo già fatto questo genere
‫di cose prima quando stavamo costruendo le nostre funzionalità API, giusto?
‫Quindi, solo alla fine, quando l'intera query sarà pronta,
‫la aspetteremo e la memorizzeremo da qualche parte in una variabile.
‫Ora, andiamo avanti e usiamo effettivamente questo ovunque, iniziando
‫ovviamente con il Tour.
‫Quindi, getTour sarà ora
‫di fabbrica. getOne
‫e passa nell'oggetto
‫Tour e popola opzioni, ricordi?
‫E quindi, quello che faremo è dire percorso e recensioni.
‫Giusto, quindi ricorda che la proprietà del percorso
‫è fondamentalmente il
‫campo che vogliamo popolare, e quindi possiamo
‫anche specificare select, quindi ricorda questo,
‫dove specifichiamo quale dei campi vogliamo effettivamente ottenere, giusto?
‫Ma in
‫questo caso, non abbiamo niente
‫di tutto questo, quindi lasciamolo così.
‫E ora, possiamo effettivamente andare avanti ed eliminare tutto questo.
‫Quindi, fantastico.
‫E, giusto per essere sicuri, testiamolo rapidamente.
‫Quindi, faremo un certo Tour e,
‫in effetti, funziona ancora.
‫Vediamo se questo ha avuto qualche recensione.
‫Oh, sì, in realtà lo fa,
‫e vedi che anche il processo di popolazione sta ancora funzionando.
‫Quindi, che ha avuto successo, direi.
‫E così, ora usiamo anche questo getOne in
‫tutte le altre risorse.
‫Quindi, il controller utente qui dove abbiamo,
‫vediamo dov'è, ah, quaggiù.
‫Quindi, diciamo fabbrica. getOne, ma
‫solo con il modello utente e nessun
‫oggetto opzioni di popolamento.
‫Ok, e dal momento che
‫siamo qui, in realtà cambiamo semplicemente il messaggio di
‫errore qui per creare
‫utente, quindi questo percorso non è definito, non lo sarà mai
‫e per favore usa invece la registrazione.
‫Il prossimo, e
‫infine, la stessa cosa per le recensioni fondamentalmente.
‫Quindi, esportazioni. getReview
‫è uguale fabbrica. getOne recensione,
‫e penso che non abbiamo ancora (borbotta) le nostre rotte.
‫E, in effetti, non lo facciamo, quindi aggiungendo questo molto veloce
‫qui, reviewController. getReview, ok?
‫Proviamo velocemente anche questo, solo
‫perché voglio aggiungerlo anche qui
‫a Postman, ok?
‫Quindi, solo copiando questo perché è simile, e poi,
‫in effetti, è get.
‫E, sì, funziona perfettamente, memorizzalo qui nelle recensioni
‫e getReview.
‫Va bene, ora tutto
‫ciò che manca è fondamentalmente una funzione di fabbrica getAll, giusto?
‫Quindi, fondamentalmente,
‫per sostituire questo getAllTours, getAllUsers, che dovremmo
‫anche avere da qualche parte qui, quindi getAllUsers e
‫anche getAllReviews, quindi copiamolo di nuovo qui dal controller
‫del tour perché in realtà questo è
‫quello che è davvero completo perché
‫ha tutto queste funzionalità API e quindi, dopo
‫aver creato la nostra funzione di fabbrica getAll,
‫tutte e tre le risorse otterranno queste funzionalità API.
‫Quindi, di nuovo, copiando tutto questo,
‫esporta. getAll,
‫quindi ora dovremo effettivamente richiedere queste funzionalità
‫API qui,
‫e infatti possiamo effettivamente rimuoverle da qui perché
‫non ne avremo più
‫bisogno perché ora lo trasferiamo alla fabbrica dell'handler, giusto?
‫Ora, qui tutto ciò che dobbiamo fare è sostituire,
‫come sempre, con modello, e poi
‫qui, doc e dati.
‫Ora, ok, perfetto.
‫Quindi, vediamo
‫se funziona, getAll con Tour.
‫E ora, voglio davvero vedere se
‫funziona ancora con tutte queste funzionalità,
‫quindi è qui, getAll Tours, e
‫quindi, aggiungiamo la nostra
‫stringa di query qui, e diciamo la durata maggiore o
‫uguale di diciamo un 10, e ordiniamo per prezzo.
‫Ok, quindi otteniamo due risultati qui.
‫Ok, non funziona.
‫Ad ogni modo, qui otteniamo i due risultati (ridacchia),
‫ed entrambi hanno una durata maggiore di
‫10, e il prezzo è
‫1497, e il secondo è più alto, ok?
‫Mettiamolo qui come sette, così otteniamo un
‫po' più di risultati.
‫Ok, e ora ne prendiamo cinque.
‫Ok, comunque, ora facciamo lo stesso per le recensioni
‫perché sono davvero entusiasta di testare queste funzionalità
‫API anche sulle recensioni.
‫Ora, un problema che abbiamo qui
‫è che questo gestore di route ha effettivamente queste due
‫righe di codice che tutti gli altri gestori getAll non hanno, ok?
‫Ma quello che faremo qui è semplicemente copiare questo
‫codice anche nella nostra fabbrica di gestori, ok?
‫È una specie
‫di hack perché abbiamo davvero bisogno di questo solo per
‫getAll recensioni, ma aggirare questo sarebbe un po'
‫troppo lavoro qui in questa situazione, e ancora una
‫volta, voglio semplicemente mantenerlo semplice qui, va bene.
‫Quindi, copiamo
‫questo qui e aggiungo un commento
‫qui per consentire getReviews nidificati in tour, ok?
‫E quindi questo filtro, lo passeremo anche qui, ok?
‫Quindi di nuovo, questo è
‫un piccolo trucco, ma
‫lo lascerò qui così perché penso che sia ragionevole, va bene.
‫Comunque, ora liberiamoci di questo,
‫quindi fabbrica. getAll e rivedi, ok?
‫Mettiamolo qui accanto a tutti gli altri.
‫E ora,
‫come vedi, in realtà non abbiamo nemmeno più bisogno di questo
‫catchAsync qui, quindi lo commenterò
‫qui perché, chissà, forse in futuro ne avremo
‫bisogno per qualche altra funzione Middleware qui, tutto Giusto.
‫Quindi, sembra bello e
‫pulito, e ora testiamo le recensioni di getAll.
‫Va bene, quindi salviamo anche qui le modifiche.
‫Questi non ci servono,
‫ma in realtà voglio avere tutte le recensioni.
‫Quindi, in questo momento abbiamo
‫quattro recensioni, quindi proviamo a filtrare solo
‫per le recensioni con un punteggio di quattro, diciamo.
‫Quindi, stringa di query, valutazione uguale a quattro.
‫Oh, e funziona davvero,
‫così bello, è davvero carino.
‫Quindi, proprio in questo modo, abbiamo accesso a tutte queste
‫funzionalità API come il filtro, l'ordinamento, l'impaginazione e tutte quelle cose buone che
‫abbiamo implementato (ridacchia) molto tempo fa
‫durante il corso, giusto?
‫E voglio anche
‫assicurarmi che anche questa recensione di getAll su Tour funzioni ancora.
‫Quindi, controlliamo e,
‫sì, vedi che lo fa davvero.
‫Quindi, il Tour ID che
‫abbiamo qui è esattamente quello qui e proprio qui.
‫Quindi, anche quello
‫funziona ancora, quindi usiamo finalmente
‫anche getAll per il controller utente, va bene.
‫Quindi, sostanzialmente sostituendo semplicemente
‫questo, quindi fabbrica. utente getAll, va bene.
‫E, in effetti,
‫mettiamo questo qui vicino agli altri, va bene.
‫E poi anche questo, quindi
‫in pratica avendo tutti questi generati dalle funzioni
‫di fabbrica insieme, e
‫poi tutti gli altri semplicemente sopra di loro.
‫Va bene, facciamo lo stesso qui, questo è
‫già bello e pulito,
‫e lo stesso per il controller Tour, quindi
‫cos'altro abbiamo qui?
‫Di questo possiamo
‫sbarazzarci e, ok, penso che sia carino così.
‫Di nuovo, possiamo commentare questo pezzo di codice
‫perché, almeno per ora, non ne abbiamo più bisogno.
‫E così, giusto per testarlo di nuovo qui con gli
‫utenti, mettiamoli tutti insieme,
‫e, in effetti, eccoli qui.
‫Ora possiamo anche dire che
‫vogliamo solo quelli con il ruolo
‫di utente e, in effetti, funziona anche così.
‫Fantastico, e questo in realtà conclude questa parte della creazione
‫delle funzioni di fabbrica dell'handler, e
‫questo è stato davvero un enorme passo avanti nel nostro progetto,
‫quindi ricorda che,
‫un po' più tardi, creeremo anche una
‫risorsa di prenotazione, e quindi vedi che probabilmente noi
‫saremo in grado di creare l'API principale per
‫queste prenotazioni in cinque secondi
‫o qualcosa del genere, semplicemente usando queste cinque funzioni di fabbrica, va bene.
‫Comunque, buon lavoro, ottimo lavoro, e
‫ci vediamo alla prossima.