‫Istruttore: In
‫questo video implementeremo la pagina delle mie prenotazioni.
‫Quindi, in pratica, renderemo una bella pagina
‫contenente tutti i tour che un utente ha prenotato.
‫E iniziamo aggiungendo un nuovo percorso alla nostra viewRoutes.
‫Ok, quindi abbiamo me e quindi creiamo
‫i miei-tour.
‫Quindi sto duplicando questo, my-tours, quindi anche questo percorso deve essere
‫protetto in modo che solo
‫gli utenti attualmente
‫registrati possano accedere a questa pagina, ovviamente.
‫E poi, nel nostro
‫viewsController, avremo un controller chiamato getMyTours.
‫MyTours così, ok?
‫E per ora è tutto,
‫quindi andiamo avanti e creiamo questo controller ora.
‫Ok, quindi abbiamo tutte queste informazioni qui,
‫fai il tour, ottieni il modulo di accesso, ottieni l'account.
‫Quindi mettiamo anche questo qui.
‫E quindi ora, ciò che dobbiamo
‫fare qui è trovare tutti i tour che l'utente ha prenotato.
‫Quindi, in pratica, prima dobbiamo trovare tutte le prenotazioni
‫per gli utenti attualmente registrati che
‫ci daranno un mucchio di ID tour,
‫e poi dobbiamo trovare i tour con quegli ID.
‫Quindi, in pratica, trova tutte le prenotazioni e poi
‫trova i tour con gli ID restituiti.
‫Quindi fondamentalmente gli ID delle prenotazioni per l'utente, giusto?
‫Ora, invece, potremmo anche fare
‫un popolamento virtuale sui tour, e sarebbe bello
‫se lo implementassi da solo
‫esattamente come abbiamo fatto prima con i tour e le recensioni,
‫ma qui in questa funzione in
‫realtà volevo per mostrarti come possiamo farlo manualmente
‫perché penso che
‫sia anche abbastanza importante e in realtà
‫una popolazione virtuale dovrebbe
‫funzionare in qualcosa di simile a quello che faremo qui.
‫E quindi vedi che in realtà abbiamo bisogno
‫di due query per trovare
‫davvero i tour corrispondenti alle prenotazioni dell'utente.
‫Comunque, iniziamo ora, quindi creiamo
‫una variabile per tutte le prenotazioni, attendi
‫e ora penso che non abbiamo ancora le prenotazioni qui, no.
‫Quindi Bookings qui e bookingModel.
‫E qui, ovviamente, si tratta solo di prenotare, d'accordo.
‫Quindi attendi la prenotazione. trova, e ora ricorda
‫che ogni documento di prenotazione ha un ID utente, giusto?
‫Quindi qui nello schema
‫ricorda che abbiamo l'ID tour, l'ID
‫utente e poi tutti questi altri
‫dati, quindi quello
‫che faremo ora è fondamentalmente interrogare dall'ID utente, ok?
‫E quindi questo
‫ci restituirà tutti i tour che appartengono all'utente corrente, ok?
‫Quindi, non questo.
‫Quindi tour dovrebbe essere uguale a req. utente. ID.
‫Quindi qui async e, come sempre, anche catchAsync.
‫Quindi queste prenotazioni ora contengono tutti i documenti
‫di prenotazione per l'utente corrente, ma in
‫realtà questo ci fornisce solo gli ID del tour.
‫E così ora vogliamo trovare i tour con gli ID restituiti.
‫Quindi il passaggio successivo consiste
‫nel creare fondamentalmente un array di tutti
‫gli ID, quindi dopo quella query per
‫i tour che hanno uno di questi ID, ok?
‫E questo avrà un po' più senso una
‫volta che avremo effettivamente implementato ciò che ho appena spiegato.
‫Quindi tourIDs è uguale alle prenotazioni e ora useremo una
‫mappa per creare un
‫nuovo array basato su una funzione di callback
‫che è questa, quindi
‫l'attuale el. tour. ID.
‫Allora, cosa farà questo?
‫Bene, in pratica questo passa attraverso l'intero array di prenotazioni
‫e su ogni elemento catturerà l'el. tour.
‫E in realtà, non abbiamo nemmeno
‫bisogno dell'ID qui perché il tour stesso è già l'ID del tour, giusto?
‫Quindi, alla fine, abbiamo una bella serie
‫con tutti gli ID del tour qui e questo
‫perché abbiamo usato una mappa.
‫Ok, avendo tutti gli ID del
‫tour, possiamo effettivamente ottenere i tour corrispondenti a quegli ID.
‫Quindi aspetta Tour. find e in realtà vogliamo trovare per ID, ma non
‫possiamo usare il . findbyid perché qui
‫in realtà avremo bisogno di un nuovo operatore.
‫E viene chiamato il
‫suddetto operatore, che non so se abbiamo
‫usato prima.
‫Quindi, nei tourID.
‫Quindi, in pratica, ciò
‫che farà invece selezionerà tutti
‫i tour che hanno un ID che si trova nell'array tourIDs, ok?
‫Quindi è abbastanza
‫semplice, ma è fantastico sapere
‫che possiamo usare questo operatore molto utile qui, ok?
‫E quindi questo è in realtà uno
‫dei motivi per cui ho voluto
‫farlo manualmente invece di eseguire semplicemente un popolamento virtuale come abbiamo fatto prima.
‫Ma ancora una volta, sarebbe bello se andassi avanti
‫e lo implementassi effettivamente anche
‫solo per il gusto di farlo, sai.
‫Ok, e con questo
‫abbiamo i nostri tour pronti per essere renderizzati.
‫Quindi, ris. lo stato come
‫sempre, e poi renderli, va bene?
‫E in realtà, non abbiamo nemmeno bisogno di un nuovo modello per questo.
‫Riutilizzeremo semplicemente la panoramica, ok?
‫Quindi finiremo con una
‫pagina che sembra molto simile alla
‫panoramica, ma solo con i tour che l'utente ha prenotato.
‫Quindi, quassù e per avere una
‫panoramica, in realtà siamo passati in tutti i tour, ok?
‫Quindi praticamente tutti.
‫E quindi ora avremo qualcosa di
‫molto simile ma ovviamente solo di passaggio nei tour prenotati.
‫Allora, dov'è?
‫Va bene, quindi il titolo sarà I miei tour,
‫e di nuovo passando la variabile tour.
‫Ok e dovrebbe essere così.
‫Ora, ovviamente, avremmo anche potuto creare
‫una scheda completamente nuova per queste librerie con
‫alcune informazioni più
‫rilevanti su ciascuna delle prenotazioni,
‫ma in questo caso non è molto importante.
‫Ora, giusto?
‫Quindi, siamo effettivamente pronti a
‫testarlo perché abbiamo già implementato il percorso qui prima.
‫E quindi questo è il mio tour.
‫Oh, ma in realtà impostiamo questo collegamento qui
‫proprio nella pagina dell'account utente.
‫Quindi questo mio-tour dovrebbe ovviamente
‫avere il proprio link proprio qui nell'account.
‫Quindi in quella colonna
‫di sinistra, quindi è proprio qui in Le mie
‫prenotazioni, quindi abbiamo questo primo
‫qui che è per il collegamento, ricorda.
‫E quindi in questo momento, praticamente tutti non indicano dove, ma ora
‫per le prenotazioni abbiamo effettivamente un collegamento.
‫E quindi questo è il mio tour.
‫E avremmo potuto chiamarlo anche prenotazioni, ma
‫comunque non è molto importante.
‫Quindi, ora siamo pronti per testarlo.
‫Effettuiamo il logout da questo
‫utente, quindi accediamo come l'altro nostro utente, Laura.
‫Va bene, quindi vediamo cosa otteniamo qui e questo sta
‫impiegando troppo tempo, quindi
‫diamo un'occhiata al nostro codice, modifichiamo il nostro terminale qui.
‫Ok, quindi non ci sono errori qui, ma sembra
‫anche che qui non stia succedendo nulla.
‫Quindi il percorso dei miei tour qui non compare nemmeno, d'accordo.
‫Ora, per trovare questo bug,
‫ho dovuto fare un po' di debug al di
‫fuori di questo video perché era davvero difficile da trovare, ok.
‫Innanzitutto, c'è un piccolo errore qui.
‫Quindi questo qui dovrebbe effettivamente essere utente e non essere tour.
‫Quindi l'ho spiegato correttamente allora,
‫dove ho detto che dobbiamo filtrare per
‫utente, quindi tour in cui l'utente
‫è uguale all'utente proveniente dalla richiesta,
‫ma poi per qualche motivo ho sbagliato qui, ok?
‫Ma in realtà non è questo il bug principale.
‫Quindi non quello che impedisce alla pagina di caricarsi effettivamente.
‫L'errore che fa sì che ciò
‫accada è proprio qui, in realtà, nel modello di prenotazione.
‫Ed è quaggiù in questo middleware di pre-ricerca.
‫E il problema
‫è che non chiamiamo mai il prossimo middleware qui, giusto?
‫Quindi, di nuovo, questo è un pre-middleware.
‫E tutti i pre-middleware hanno accesso
‫alla funzione successiva e quindi, alla
‫fine di questi middleware, dobbiamo
‫sempre chiamare next.
‫Altrimenti, il nostro processo si blocca davvero, ok?
‫Quindi dai un salvataggio, puoi effettivamente chiudere questo.
‫E quindi ora proviamo di nuovo
‫e ora abbiamo davvero i miei tour,
‫ma è vuoto poiché questo utente non ha mai fatto una prenotazione.
‫Quindi, proviamolo ora e prenotiamo
‫l'escursionista nella foresta.
‫Quindi dovrebbe funzionare ancora,
‫e in effetti funziona, molto bene.
‫Abbiamo l'indirizzo email preformattato e ora,
‫come sempre, 4242.
‫Quindi abbiamo fatto la prenotazione prima in realtà con questo
‫utente, ma prima abbiamo implementato il modello di prenotazione
‫e quindi non abbiamo mai
‫veramente creato una prenotazione nel nostro sistema.
‫Va bene, quindi
‫pagamento accettato e ora vediamo e ci siamo, fantastico!
‫Quindi quella logica che abbiamo appena implementato ha funzionato
‫davvero e quindi l'unico
‫problema era che mancava nel middleware.
‫E proprio così, abbiamo completato un'altra pagina del
‫nostro sito Web dinamico.
‫E quindi, tutto ciò che resta da fare a questo
‫punto è completare l'API delle prenotazioni.