‫Jonas: Lassen Sie uns weiterhin einige Factory-Funktionen
‫erstellen, diesmal zum Aktualisieren und zum Erstellen einiger Ressourcen.
‫Da wir jetzt bereits wissen, wie es
‫funktioniert, ist es wirklich einfach, dasselbe für die
‫Aktualisierung fortzusetzen.
‫Also Exporte. updateOne,
‫und lassen Sie uns den Code erneut
‫vom Tour-Controller kopieren.
‫Okay.
‫Und wir haben jetzt eine
‫Menge Dateien geöffnet, weil wir sie
‫alle gleichzeitig ändern.
‫Also kopieren wir das und fügen
‫es hier ein.
‫Was uns also interessiert, ist wieder dieser Teil.
‫Okay.
‫Und jetzt müssen wir natürlich diese Factory-Funktion erstellen, weil
‫wir dies nicht zurückgeben möchten.
‫Stattdessen wollen wir eine
‫Funktion zurückgeben, die dann wiederum dies zurückgibt.
‫Rechts?
‫Das ist also ganz einfach.
‫Wir verwenden eine einfache Pfeilfunktion, bei der wir das
‫Modell übergeben und dann implizit alles zurückgeben, was nach dem Pfeil kommt.
‫Also, all das.
‫Gut.
‫Lassen Sie uns also wie zuvor das spezifische
‫Modell durch ein
‫allgemeines ersetzen und dann all dies hier durch document ersetzen.
‫Oder eigentlich mit doc, wie wir es vorher gemacht haben.
‫Und hier ist es
‫kein Dokument, und hier unten, wo wir die Daten
‫tatsächlich senden, wäre es schön, ihm den Eigenschaftsnamen der Daten
‫zu geben, die wir senden.
‫Zum Beispiel Rezensionen und dann das Dokument oder Touren.
‫Okay.
‫Aber das ist im Moment ein bisschen zu viel Arbeit, um es umzusetzen.
‫Und so belasse ich es einfach so, wo
‫ich wieder Daten gesendet habe.
‫Gut.
‫So gingen unsere Daten
‫hierher, und dann wird der Umschlag dort
‫wieder Daten heißen.
‫Gut.
‫Und so sollte das
‫jetzt funktionieren, weil alles andere wirklich gleich ist.
‫Und so können wir weitermachen, all das loswerden
‫und einfach Fabrik
‫sagen. updateOne, geben
‫Sie das Tour-Modell ein und machen Sie Schluss.
‫Gut?
‫Also ganz einfach.
‫Als nächstes das gleiche für die Benutzer.
‫Wir haben also wieder updateUser.
‫Diese Route ist noch nicht implementiert.
‫Also ersetzen wir das alles hier einfach
‫durch unsere Werksfunktion updateOne.
‫Gut.
‫Und so ist diese updateUser-Funktion nach wie
‫vor nur für Administratoren, okay?
‫Und nur zum Aktualisieren von Daten, bei denen es
‫sich nicht um das Passwort handelt, denn denken Sie daran, wann immer wir es verwenden,
‫wo ist das, also wenn wir findById und aktualisieren verwenden,
‫wird nicht die gesamte sichere Middleware ausgeführt.
‫Denken Sie also daran, wie wir ein paar Mal darüber gesprochen haben.
‫Daher ist es
‫noch einmal sehr wichtig, dass wir hier nicht versuchen, Passwörter
‫mit diesem updateUser zu ändern.
‫Okay?
‫Lass uns das hier wirklich schreiben.
‫Mit diesem.
‫Groß.
‫Und jetzt, endlich, legen
‫wir es auch in den Review-Controller.
‫Gut.
‫Also Exporte. updateReview
‫und dann unser Review.
‫Das ist also ganz einfach.
‫Lassen Sie uns nun diese Routen auch zu Postman hinzufügen.
‫Wir haben also
‫Delete Review und fügen es jetzt einfach als PATCH hier hinzu.
‫Und die Sache, die wir auch noch brauchen, um die
‫Route im Testrouter zu implementieren.
‫Also machen wir das auch.
‫Aber zuerst werde ich es hier in Rezensionen speichern.
‫Also Review aktualisieren.
‫Hier, in den Review-Routen, sollten wir
‫also die Patch-Methode hinzufügen und dann
‫reviewController. updateReview.
‫Gut.
‫Schauen wir uns also eine dieser Bewertungen
‫hier an, sagen wir diese und aktualisieren die Bewertung auf vier.
‫Okay.
‫Also der Körper,
‫stell ihn auf vier.
‫Und senden Sie es jetzt.
‫Okay, und wie wir sehen können, bekommen wir unsere neue Rezension
‫mit der aktualisierten Bewertung zurück, genau wie erwartet.
‫Und wieder kümmern wir uns etwas später in diesem
‫Abschnitt um die Autorisierung.
‫Im Moment wollte ich das nur zum Laufen bringen.
‫Also Benutzer, lassen Sie uns jetzt auch Benutzer aktualisieren.
‫Okay?
‫Also GET und PATCH.
‫Lassen Sie uns hier alle Benutzer abrufen.
‫Sagen wir diesen.
‫Und ändern wir
‫den
‫Namen in Administrator, der vorher einfach admin war.
‫Gut?
‫Und so hat auch dieser funktioniert.
‫Okay, also noch einmal, ich speichere das alles hier in meiner Sammlung,
‫weil ich dann,
‫etwas später, tatsächlich eine Dokumentation aus all
‫diesen Sammlungsdaten erstellen kann, die wir hier haben.
‫Also Update User,
‫füge das hier ein und dieses hier.
‫Perfekt.
‫Das Aktualisieren von Benutzern funktioniert jetzt
‫für alle unsere drei Ressourcen mithilfe der Factory-Funktion.
‫Lassen Sie uns also fortfahren und das nächste
‫hinzufügen, das createOne sein wird.
‫Also exportiert, createOne.
‫Und wieder übergeben wir das Modell.
‫Und daraus erstellen wir eine neue Funktion.
‫Und das kann es tatsächlich
‫noch einmal von der Tour hier kopieren.
‫Gut.
‫Also brauchen wir hier nur diesen Teil.
‫Also modellieren und dokumentieren.
‫Und hier unten nennen wir es wieder Daten.
‫Gut.
‫Und so ist es tatsächlich.
‫Das ist unsere Fabrikfunktion.
‫Und so kommen wir noch einmal hierher und ersetzen es.
‫Also Fabrik. createOne, Tour.
‫Sie sehen also, dass unser Code
‫in den Controllern jetzt wirklich sauber wird, oder?
‫Aber eigentlich werden wir nicht alle Funktionen,
‫die wir hier haben, durch Fabriken ersetzen können, denn
‫sonst bräuchten wir diese Controller-Datei
‫nicht einmal, oder?
‫Wir könnten diese Handler dann einfach im Handumdrehen erstellen,
‫im Grunde in der Router-Datei, oder?
‫Und so könnten wir diesen gesamten Schritt
‫der Controller-Datei im Grunde überspringen.
‫Aber auch hier brauchen wir es
‫immer noch, weil wir noch einige andere Sachen drin haben.
‫Zum Beispiel diese Methoden hier,
‫um die Tourstatistiken zu erhalten, oder dieser
‫Monatsplan und ja.
‫Es ist also sinnvoll, diese Datei tatsächlich aufzubewahren, okay?
‫Als nächstes brauchen
‫wir also für die Benutzer das createOne eigentlich nicht,
‫weil wir zum Anlegen neuer
‫Benutzer bereits die Anmeldefunktion haben, und
‫wir können dies nicht wirklich durch eine Fabrik
‫ersetzen, da sie sich wirklich von dieser generischen unterscheidet.
‫Okay?
‫Aber wir können es im Review-Controller tun, okay?
‫Im Grunde wollen wir also dieses createReview ersetzen.
‫Jetzt sehen Sie auch, dass
‫wir in diesem einen zusätzlichen Schritt haben.
‫Wir haben also diesen Code,
‫der auch nicht in unserer generischen createOne-Funktion enthalten ist.
‫Und wie können wir das beheben?
‫Nun, wir können tatsächlich eine
‫Middleware erstellen, die vor dem createReview ausgeführt wird, okay?
‫Und damit ist es eigentlich auch etwas entkoppelter.
‫Im Grunde hat dieser Code hier also eine eigene
‫Funktion und
‫ist wirklich von createReview entkoppelt, da er
‫eigentlich nicht viel mit der Erstellung
‫des Reviews zu tun hat.
‫Es legt einfach einige Daten fest, oder?
‫Nennen wir dies also Set-Tour und Benutzer-IDs.
‫Also Anfrage, ah, die Antwort fehlt.
‫Okay?
‫Und alles, was wir
‫hier tun werden, ist, diese IDs im Grunde auf den Körper zu
‫setzen und dann direkt zur nächsten Middleware zu
‫wechseln, wo dann die Überprüfung tatsächlich erstellt wird.
‫In Ordung?
‫Bevor wir es
‫also vergessen, fügen wir diese Middleware tatsächlich hinzu.
‫In den Bewertungsrouten ist es also gleich hier in der Post.
‫Also checkController, setTourUserIds.
‫Okay?
‫Also noch eine weitere Middleware-Funktion in diesem Stack.
‫Okay.
‫Wie auch immer, lassen Sie uns dann das, was wir
‫hier haben, loswerden, weil
‫dies leicht durch unsere Werksfunktion ersetzt werden kann, noch einmal.
‫Also createOne, dann Review, und das war's.
‫Okay.
‫Und nur um zu testen, ob
‫das noch funktioniert, erstellen wir einfach eine neue Rezension auf Tour.
‫Okay?
‫Und dafür brauchen wir die Tour-IDs, sagen
‫wir also auch Get All Tours.
‫Und jetzt bekommen wir, dass der zugehörige Benutzer nicht mehr existiert, also lass uns
‫einfach weitermachen und uns erneut einloggen.
‫Holen Sie sich also hier ein neues Token.
‫Also, los geht's, als Admin.
‫Also jetzt, Get All Tours, los geht's.
‫Wählen wir einfach einen davon aus.
‫Sagen wir also, The Forest Hiker.
‫Ich denke, dieser hier hat bereits einige Bewertungen, nicht wahr?
‫Oh nein, tut es nicht.
‫Dieser ist also ein guter, um ihn jetzt auszuprobieren.
‫Erstellen Sie also eine neue Bewertung auf Tour.
‫Denken Sie daran, dass wir hier die ID ändern müssen.
‫Und jetzt können wir
‫diese Rezension nur mit der Bewertung und der Rezension veröffentlichen.
‫Aber ich denke, es
‫wird tatsächlich nicht funktionieren, weil wir als Administrator
‫angemeldet sind und nur normale Benutzer Bewertungen abgeben können.
‫Okay?
‫Okay, also lass uns das hier noch machen.
‫Unglaublich.
‫Aber wir werden diesen Fehler bekommen, den ich gerade gesagt habe.
‫Sie haben also keine Berechtigung zum Ausführen.
‫Daher müssen wir
‫uns erneut anmelden, diesmal als anderer Benutzer.
‫Und schauen wir uns an, welche wir tatsächlich haben.
‫Ah, okay.
‫Verwenden wir also einfach test.
‫Oder vielleicht war test derjenige mit dem falschen Passwort.
‫Aber mal sehen.
‫Oh ja.
‫Experimentieren wir also mit testuser.
‫Und dieser funktioniert.
‫Und so können wir eigentlich dieses andere löschen,
‫weil ich irgendwie sein Passwort vergessen habe.
‫Okay.
‫Und das ist in diesem Fall kein Problem.
‫Wir können Benutzer einfach nach Belieben löschen, da wir uns
‫erst in der Entwicklung befinden.
‫Okay?
‫Jetzt sollten wir in der Lage sein, diese Bewertung tatsächlich hinzuzufügen.
‫Und tatsächlich, los geht's.
‫Perfekt.
‫Damit ist dieser Vortrag abgeschlossen.
‫Alles, was wir im nächsten
‫tun müssen, ist dann die Factory-Funktionen
‫zu erstellen, um eine zu erhalten und alle Dokumente einer
‫bestimmten Ressource zu erhalten.