‫Kursleiter: In
‫diesem Video implementieren wir die Seite "Meine Buchungen".
‫Im Grunde werden wir also eine schöne Seite
‫erstellen, die alle Touren enthält, die ein Benutzer gebucht hat.
‫Beginnen wir mit dem Hinzufügen einer neuen Route zu unseren viewRoutes.
‫Okay, wir haben mich und dann erstellen wir
‫dann die My-Touren.
‫Also dupliziere ich diese, my-tours, dann muss auch diese Route
‫geschützt werden, damit natürlich nur
‫aktuell eingeloggte
‫Benutzer auf diese Seite zugreifen können.
‫Und dann haben wir
‫in unserem viewsController einen Controller namens getMyTours.
‫MyTours wie diese, okay?
‫Und das war's für den
‫Moment, also lass uns diesen Controller jetzt erstellen.
‫Okay, wir haben
‫all dies hier, Tour, Login-Formular, Account.
‫Also lasst uns auch dieses hier platzieren.
‫Hier müssen wir also jetzt
‫alle Touren finden, die der Benutzer gebucht hat.
‫Im Grunde müssen wir also zuerst alle Buchungen für die
‫derzeit eingeloggten Benutzer finden, die uns
‫dann eine Reihe von Tour-IDs geben, und
‫dann müssen wir die Touren mit diesen IDs finden.
‫Suchen Sie also grundsätzlich alle Buchungen und finden
‫Sie dann Touren mit den zurückgegebenen IDs.
‫Also im Grunde die IDs der Buchungen für den Benutzer, oder?
‫Stattdessen könnten wir jetzt auch
‫eine virtuelle Bestückung der Touren machen, und es
‫wäre toll, wenn ihr das genauso
‫in Eigenregie umsetzen würdet, wie wir es vorher mit den Touren
‫und den Reviews gemacht haben, aber
‫hier in dieser Funktion wollte ich eigentlich um Ihnen
‫zu zeigen, wie
‫wir es manuell machen können, weil ich denke,
‫dass das auch irgendwie wichtig
‫ist und tatsächlich sollte eine virtuelle Bevölkerung ähnlich wie hier funktionieren.
‫Sie sehen also, dass wir eigentlich zwei Abfragen
‫brauchen, um wirklich die Touren
‫zu finden, die den Buchungen des Users entsprechen.
‫Wie auch immer, fangen wir jetzt
‫an, also erstellen wir eine Variable für alle
‫Buchungen, warten Sie und jetzt haben wir die Buchungen hier noch nicht, nein.
‫Also Buchungen hier und bookingModel.
‫Und hier wird natürlich nur gebucht, in Ordnung.
‫Warten Sie also auf die Buchung. finden, und erinnern Sie
‫sich jetzt daran, dass jedes Buchungsdokument eine Benutzer-ID hat, oder?
‫Denken Sie also daran, dass
‫wir hier im Schema die Tour-ID, die
‫Benutzer-ID und dann all diese anderen Daten
‫haben, und was wir
‫jetzt tun werden, ist im Grunde eine Abfrage nach der Benutzer-ID, okay?
‫Und damit werden
‫uns dann alle Touren zurückgegeben, die dem aktuellen Benutzer gehören, okay?
‫Also nicht dieser.
‫Tour sollte also gleich req sein. Benutzer. Ich würde.
‫Dann hier async und wie immer auch catchAsync.
‫Diese Buchungen enthalten jetzt also alle
‫Buchungsunterlagen für den aktuellen Benutzer,
‫aber das gibt uns eigentlich nur die Tour-IDs.
‫Und so wollen wir nun die Touren mit den zurückgegebenen Ausweisen finden.
‫Der nächste Schritt besteht also
‫darin, im Grunde ein Array aller IDs
‫zu erstellen und dann nach Touren
‫abzufragen, die eine dieser IDs haben, in Ordnung?
‫Und das wird ein bisschen mehr Sinn machen,
‫wenn wir das, was ich gerade erklärt habe, tatsächlich umsetzen.
‫TourIDs ist also gleich Buchungen und jetzt werden wir eine
‫Karte verwenden, um ein
‫neues Array basierend auf einer Callback-Funktion zu erstellen,
‫die dieser ist, also
‫die aktuelle el. Tour. Ich würde.
‫Also, was wird das tun?
‫Nun, im Grunde durchläuft dies das gesamte Buchungs-Array und bei
‫jedem Element wird das el. Tour.
‫Und eigentlich brauchen wir hier nicht
‫einmal die ID, weil die Tour selbst schon die Tour-ID ist, oder?
‫Dann haben wir am Ende ein schönes Array
‫mit allen Tour-IDs hier drin und das liegt daran, dass
‫wir eine Karte verwendet haben.
‫Okay, wenn wir alle Tour-IDs haben,
‫können wir tatsächlich die Touren bekommen, die diesen IDs entsprechen.
‫Warten Sie also auf Tour. find und wir möchten eigentlich nach ID suchen, aber
‫wir können die . findbyid, weil
‫wir hier tatsächlich einen neuen Operator brauchen.
‫Und dieser Operator, von dem
‫ich nicht sicher bin, ob wir ihn schon einmal
‫benutzt haben, wird angerufen.
‫Also in tourIDs.
‫Im Grunde genommen
‫werden also stattdessen alle Touren
‫ausgewählt, die eine ID haben, die sich im tourIDs-Array befindet, okay?
‫Das ist also ziemlich
‫einfach, aber es ist sehr gut
‫zu wissen, dass wir diesen sehr praktischen Operator hier verwenden können, okay?
‫Und das ist tatsächlich einer der
‫Gründe, warum ich dies
‫manuell tun wollte, anstatt wie zuvor nur eine virtuelle Befüllung durchzuführen.
‫Aber auch hier wäre es schön,
‫wenn Sie das auch
‫nur zum Spaß umsetzen würden.
‫Okay, und damit haben
‫wir unsere Touren tatsächlich fertig zum Rendern.
‫Also, res. Status wie
‫immer, und dann rendern, in Ordnung?
‫Und eigentlich brauchen wir dafür nicht einmal eine neue Vorlage.
‫Wir werden die Übersicht einfach wiederverwenden, okay?
‫Am Ende erhalten wir also
‫eine Seite, die der Übersicht sehr ähnlich
‫sieht, jedoch nur mit den Touren, die der Benutzer gebucht hat.
‫Also, hier oben und um einen Überblick
‫zu bekommen, haben wir dann tatsächlich alle Touren passiert, okay?
‫Also im Grunde alle.
‫Und so haben wir jetzt etwas
‫ganz Ähnliches, aber natürlich nur die gebuchten Touren.
‫Also, wo ist das?
‫In Ordnung, der Titel wird also Meine Touren
‫sein und wieder die Tour-Variable übergeben.
‫Okay und das sollte es sein.
‫Jetzt hätten wir natürlich auch eine
‫ganz neue Karte für diese Buchhandlungen mit einigen
‫relevanteren Informationen zu jeder
‫der Buchungen erstellen können, aber
‫das ist in diesem Fall nicht wirklich wichtig.
‫Jetzt rechts?
‫Wir sind also eigentlich bereit, dies
‫zu testen, da wir die Route hier bereits zuvor implementiert haben.
‫Und das sind meine Touren.
‫Oh, aber lassen Sie uns diesen Link hier
‫direkt auf der Benutzerkontoseite setzen.
‫Daher sollte diese my-tours natürlich
‫gleich hier im Account einen eigenen Link haben.
‫Also in dieser linken
‫Spalte, also genau hier in Meine Buchungen, also haben
‫wir diese erste hier, die
‫für den Link ist, denken Sie daran.
‫Und so zeigen im Moment im Grunde alle nirgendwo hin, aber jetzt
‫haben wir für die Buchungen tatsächlich einen Link.
‫Und das ist meine-Touren.
‫Und wir hätten es auch Buchungen nennen können,
‫aber das ist sowieso nicht wirklich wichtig.
‫Also, jetzt sind wir bereit, dies zu testen.
‫Melden wir uns tatsächlich von diesem Benutzer
‫ab und melden uns dann als unser anderer Benutzer Laura an.
‫In Ordnung, und sehen wir, was wir hier bekommen, und das
‫dauert viel zu lange, also
‫werfen wir einen Blick auf unseren Code, bearbeiten Sie unser Terminal hier.
‫Okay, hier liegt kein Fehler vor, aber es sieht auch
‫so aus, als ob hier wirklich nichts passiert.
‫Also wird die my-tours-Route hier nicht einmal angezeigt.
‫Um diesen Fehler zu
‫finden, musste ich außerhalb dieses Videos tatsächlich
‫etwas debuggen, weil er wirklich schwer zu finden war, okay.
‫Zuerst gibt es hier einen kleinen Fehler.
‫Das sollte hier also eigentlich User und nicht Tour sein.
‫Also ich habe es damals richtig
‫erklärt, wo ich sagte, dass wir nach dem Benutzer
‫filtern müssen, also Touren, bei denen der Benutzer
‫gleich dem Benutzer ist, der aus der Anfrage kommt,
‫aber dann habe ich es aus irgendeinem Grund hier falsch gemacht, okay?
‫Aber das ist eigentlich nicht der Hauptfehler.
‫Also nicht derjenige, der das Laden der Seite verhindert.
‫Der Fehler, der dazu
‫führt, liegt genau hier im Buchungsmodell.
‫Und es ist hier unten in dieser Pre-Find-Middleware.
‫Und das Problem
‫ist, dass wir hier nie die nächste Middleware aufrufen, oder?
‫Dies ist also wieder eine Pre-Middleware.
‫Und alle Pre-Middlewares haben Zugriff auf die
‫nächste Funktion und so müssen wir
‫am Ende dieser Middleware immer
‫als nächstes aufrufen.
‫Sonst bleibt unser Prozess wirklich stecken, in Ordnung?
‫Also speichern Sie das, können Sie dieses tatsächlich schließen.
‫Und jetzt versuchen wir es noch
‫einmal und jetzt haben wir tatsächlich meine Touren,
‫aber sie ist leer, da dieser Benutzer nie wirklich eine Buchung vorgenommen hat.
‫Also, probieren wir das jetzt aus
‫und buchen den Waldwanderer.
‫Das sollte also noch funktionieren,
‫und das tut es auch sehr schön.
‫Wir haben die E-Mail-Adresse vorformatiert und
‫jetzt wie immer 4242.
‫Also haben wir die Buchung vorher eigentlich mit diesem Benutzer
‫gemacht, aber bevor wir das Buchungsmodell implementiert haben und
‫daher haben wir nie
‫wirklich eine Buchung in unserem System erstellt.
‫Alles klar, also Zahlung
‫akzeptiert und nun mal sehen und los gehts, super!
‫Die Logik, die wir gerade implementiert haben, funktionierte also tatsächlich
‫und das einzige Problem bestand
‫darin, dass der nächste in der Middleware fehlte.
‫Und so haben wir eine weitere Seite
‫unserer dynamischen Website fertiggestellt.
‫Als nächstes müssen Sie an dieser Stelle nur
‫noch die Buchungs-API fertigstellen.