﻿1
00:00:01,042 --> 00:00:02,080
‫Kursleiter: In

2
00:00:02,080 --> 00:00:04,790
‫diesem Video implementieren wir die Seite "Meine Buchungen".

3
00:00:04,790 --> 00:00:07,200
‫Im Grunde werden wir also eine schöne Seite

4
00:00:07,200 --> 00:00:10,183
‫erstellen, die alle Touren enthält, die ein Benutzer gebucht hat.

5
00:00:11,950 --> 00:00:15,920
‫Beginnen wir mit dem Hinzufügen einer neuen Route zu unseren viewRoutes.

6
00:00:17,120 --> 00:00:21,320
‫Okay, wir haben mich und dann erstellen wir

7
00:00:21,320 --> 00:00:23,253
‫dann die My-Touren.

8
00:00:24,720 --> 00:00:29,720
‫Also dupliziere ich diese, my-tours, dann muss auch diese Route

9
00:00:29,740 --> 00:00:32,230
‫geschützt werden, damit natürlich nur

10
00:00:32,230 --> 00:00:34,090
‫aktuell eingeloggte

11
00:00:34,090 --> 00:00:37,150
‫Benutzer auf diese Seite zugreifen können.

12
00:00:37,150 --> 00:00:39,020
‫Und dann haben wir

13
00:00:39,020 --> 00:00:41,723
‫in unserem viewsController einen Controller namens getMyTours.

14
00:00:44,029 --> 00:00:47,480
‫MyTours wie diese, okay?

15
00:00:47,480 --> 00:00:49,943
‫Und das war's für den

16
00:00:50,930 --> 00:00:54,123
‫Moment, also lass uns diesen Controller jetzt erstellen.

17
00:00:56,090 --> 00:00:59,030
‫Okay, wir haben

18
00:00:59,030 --> 00:01:02,790
‫all dies hier, Tour, Login-Formular, Account.

19
00:01:02,790 --> 00:01:04,853
‫Also lasst uns auch dieses hier platzieren.

20
00:01:12,559 --> 00:01:14,690
‫Hier müssen wir also jetzt

21
00:01:14,690 --> 00:01:18,060
‫alle Touren finden, die der Benutzer gebucht hat.

22
00:01:18,060 --> 00:01:21,050
‫Im Grunde müssen wir also zuerst alle Buchungen für die

23
00:01:21,050 --> 00:01:23,170
‫derzeit eingeloggten Benutzer finden, die uns

24
00:01:23,170 --> 00:01:25,620
‫dann eine Reihe von Tour-IDs geben, und

25
00:01:25,620 --> 00:01:28,503
‫dann müssen wir die Touren mit diesen IDs finden.

26
00:01:29,400 --> 00:01:34,400
‫Suchen Sie also grundsätzlich alle Buchungen und finden

27
00:01:39,790 --> 00:01:44,340
‫Sie dann Touren mit den zurückgegebenen IDs.

28
00:01:44,340 --> 00:01:48,890
‫Also im Grunde die IDs der Buchungen für den Benutzer, oder?

29
00:01:48,890 --> 00:01:50,720
‫Stattdessen könnten wir jetzt auch

30
00:01:50,720 --> 00:01:53,440
‫eine virtuelle Bestückung der Touren machen, und es

31
00:01:53,440 --> 00:01:55,413
‫wäre toll, wenn ihr das genauso

32
00:01:55,413 --> 00:01:59,130
‫in Eigenregie umsetzen würdet, wie wir es vorher mit den Touren

33
00:01:59,130 --> 00:02:01,240
‫und den Reviews gemacht haben, aber

34
00:02:01,240 --> 00:02:04,040
‫hier in dieser Funktion wollte ich eigentlich um Ihnen

35
00:02:04,040 --> 00:02:05,710
‫zu zeigen, wie

36
00:02:05,710 --> 00:02:08,290
‫wir es manuell machen können, weil ich denke,

37
00:02:08,290 --> 00:02:10,067
‫dass das auch irgendwie wichtig

38
00:02:10,067 --> 00:02:13,550
‫ist und tatsächlich sollte eine virtuelle Bevölkerung ähnlich wie hier funktionieren.

39
00:02:13,550 --> 00:02:16,100
‫Sie sehen also, dass wir eigentlich zwei Abfragen

40
00:02:16,100 --> 00:02:18,070
‫brauchen, um wirklich die Touren

41
00:02:18,070 --> 00:02:20,487
‫zu finden, die den Buchungen des Users entsprechen.

42
00:02:20,487 --> 00:02:22,850
‫Wie auch immer, fangen wir jetzt

43
00:02:22,850 --> 00:02:25,753
‫an, also erstellen wir eine Variable für alle

44
00:02:28,751 --> 00:02:33,513
‫Buchungen, warten Sie und jetzt haben wir die Buchungen hier noch nicht, nein.

45
00:02:37,840 --> 00:02:39,533
‫Also Buchungen hier und bookingModel.

46
00:02:43,010 --> 00:02:47,890
‫Und hier wird natürlich nur gebucht, in Ordnung.

47
00:02:47,890 --> 00:02:52,890
‫Warten Sie also auf die Buchung. finden, und erinnern Sie

48
00:02:53,530 --> 00:02:58,380
‫sich jetzt daran, dass jedes Buchungsdokument eine Benutzer-ID hat, oder?

49
00:02:58,380 --> 00:03:00,160
‫Denken Sie also daran, dass

50
00:03:00,160 --> 00:03:02,331
‫wir hier im Schema die Tour-ID, die

51
00:03:02,331 --> 00:03:04,410
‫Benutzer-ID und dann all diese anderen Daten

52
00:03:04,410 --> 00:03:05,870
‫haben, und was wir

53
00:03:05,870 --> 00:03:09,400
‫jetzt tun werden, ist im Grunde eine Abfrage nach der Benutzer-ID, okay?

54
00:03:09,400 --> 00:03:10,940
‫Und damit werden

55
00:03:10,940 --> 00:03:15,136
‫uns dann alle Touren zurückgegeben, die dem aktuellen Benutzer gehören, okay?

56
00:03:15,136 --> 00:03:16,653
‫Also nicht dieser.

57
00:03:20,650 --> 00:03:23,900
‫Tour sollte also gleich req sein. Benutzer. Ich würde.

58
00:03:29,170 --> 00:03:33,790
‫Dann hier async und wie immer auch catchAsync.

59
00:03:37,000 --> 00:03:39,440
‫Diese Buchungen enthalten jetzt also alle

60
00:03:39,440 --> 00:03:41,810
‫Buchungsunterlagen für den aktuellen Benutzer,

61
00:03:41,810 --> 00:03:44,690
‫aber das gibt uns eigentlich nur die Tour-IDs.

62
00:03:44,690 --> 00:03:48,350
‫Und so wollen wir nun die Touren mit den zurückgegebenen Ausweisen finden.

63
00:03:48,350 --> 00:03:50,500
‫Der nächste Schritt besteht also

64
00:03:50,500 --> 00:03:52,976
‫darin, im Grunde ein Array aller IDs

65
00:03:52,976 --> 00:03:55,430
‫zu erstellen und dann nach Touren

66
00:03:55,430 --> 00:03:58,512
‫abzufragen, die eine dieser IDs haben, in Ordnung?

67
00:03:58,512 --> 00:04:00,950
‫Und das wird ein bisschen mehr Sinn machen,

68
00:04:00,950 --> 00:04:03,973
‫wenn wir das, was ich gerade erklärt habe, tatsächlich umsetzen.

69
00:04:04,830 --> 00:04:09,347
‫TourIDs ist also gleich Buchungen und jetzt werden wir eine

70
00:04:09,347 --> 00:04:11,240
‫Karte verwenden, um ein

71
00:04:11,240 --> 00:04:14,630
‫neues Array basierend auf einer Callback-Funktion zu erstellen,

72
00:04:15,700 --> 00:04:17,530
‫die dieser ist, also

73
00:04:17,530 --> 00:04:22,300
‫die aktuelle el. Tour. Ich würde.

74
00:04:22,300 --> 00:04:25,200
‫Also, was wird das tun?

75
00:04:25,200 --> 00:04:28,630
‫Nun, im Grunde durchläuft dies das gesamte Buchungs-Array und bei

76
00:04:28,630 --> 00:04:32,760
‫jedem Element wird das el. Tour.

77
00:04:32,760 --> 00:04:35,130
‫Und eigentlich brauchen wir hier nicht

78
00:04:35,130 --> 00:04:39,210
‫einmal die ID, weil die Tour selbst schon die Tour-ID ist, oder?

79
00:04:39,210 --> 00:04:41,460
‫Dann haben wir am Ende ein schönes Array

80
00:04:41,460 --> 00:04:44,330
‫mit allen Tour-IDs hier drin und das liegt daran, dass

81
00:04:44,330 --> 00:04:45,980
‫wir eine Karte verwendet haben.

82
00:04:49,640 --> 00:04:52,500
‫Okay, wenn wir alle Tour-IDs haben,

83
00:04:52,500 --> 00:04:56,233
‫können wir tatsächlich die Touren bekommen, die diesen IDs entsprechen.

84
00:04:58,640 --> 00:05:03,640
‫Warten Sie also auf Tour. find und wir möchten eigentlich nach ID suchen, aber

85
00:05:07,380 --> 00:05:09,953
‫wir können die . findbyid, weil

86
00:05:10,900 --> 00:05:14,120
‫wir hier tatsächlich einen neuen Operator brauchen.

87
00:05:14,120 --> 00:05:15,470
‫Und dieser Operator, von dem

88
00:05:15,470 --> 00:05:17,630
‫ich nicht sicher bin, ob wir ihn schon einmal

89
00:05:17,630 --> 00:05:18,713
‫benutzt haben, wird angerufen.

90
00:05:20,370 --> 00:05:21,810
‫Also in tourIDs.

91
00:05:24,320 --> 00:05:26,330
‫Im Grunde genommen

92
00:05:26,330 --> 00:05:28,370
‫werden also stattdessen alle Touren

93
00:05:28,370 --> 00:05:33,370
‫ausgewählt, die eine ID haben, die sich im tourIDs-Array befindet, okay?

94
00:05:33,520 --> 00:05:35,277
‫Das ist also ziemlich

95
00:05:35,277 --> 00:05:37,618
‫einfach, aber es ist sehr gut

96
00:05:37,618 --> 00:05:41,720
‫zu wissen, dass wir diesen sehr praktischen Operator hier verwenden können, okay?

97
00:05:41,720 --> 00:05:43,770
‫Und das ist tatsächlich einer der

98
00:05:43,770 --> 00:05:45,620
‫Gründe, warum ich dies

99
00:05:45,620 --> 00:05:49,200
‫manuell tun wollte, anstatt wie zuvor nur eine virtuelle Befüllung durchzuführen.

100
00:05:49,200 --> 00:05:51,760
‫Aber auch hier wäre es schön,

101
00:05:51,760 --> 00:05:53,760
‫wenn Sie das auch

102
00:05:53,760 --> 00:05:55,823
‫nur zum Spaß umsetzen würden.

103
00:05:57,060 --> 00:05:58,860
‫Okay, und damit haben

104
00:05:58,860 --> 00:06:01,593
‫wir unsere Touren tatsächlich fertig zum Rendern.

105
00:06:03,330 --> 00:06:07,385
‫Also, res. Status wie

106
00:06:07,385 --> 00:06:11,230
‫immer, und dann rendern, in Ordnung?

107
00:06:11,230 --> 00:06:14,100
‫Und eigentlich brauchen wir dafür nicht einmal eine neue Vorlage.

108
00:06:14,100 --> 00:06:17,383
‫Wir werden die Übersicht einfach wiederverwenden, okay?

109
00:06:19,670 --> 00:06:21,300
‫Am Ende erhalten wir also

110
00:06:21,300 --> 00:06:23,530
‫eine Seite, die der Übersicht sehr ähnlich

111
00:06:23,530 --> 00:06:26,923
‫sieht, jedoch nur mit den Touren, die der Benutzer gebucht hat.

112
00:06:27,820 --> 00:06:30,456
‫Also, hier oben und um einen Überblick

113
00:06:30,456 --> 00:06:34,180
‫zu bekommen, haben wir dann tatsächlich alle Touren passiert, okay?

114
00:06:34,180 --> 00:06:36,510
‫Also im Grunde alle.

115
00:06:36,510 --> 00:06:38,960
‫Und so haben wir jetzt etwas

116
00:06:38,960 --> 00:06:42,113
‫ganz Ähnliches, aber natürlich nur die gebuchten Touren.

117
00:06:42,113 --> 00:06:43,653
‫Also, wo ist das?

118
00:06:47,450 --> 00:06:51,813
‫In Ordnung, der Titel wird also Meine Touren

119
00:06:56,050 --> 00:06:59,640
‫sein und wieder die Tour-Variable übergeben.

120
00:06:59,640 --> 00:07:01,680
‫Okay und das sollte es sein.

121
00:07:01,680 --> 00:07:03,810
‫Jetzt hätten wir natürlich auch eine

122
00:07:03,810 --> 00:07:06,550
‫ganz neue Karte für diese Buchhandlungen mit einigen

123
00:07:06,550 --> 00:07:08,250
‫relevanteren Informationen zu jeder

124
00:07:08,250 --> 00:07:10,080
‫der Buchungen erstellen können, aber

125
00:07:10,080 --> 00:07:12,830
‫das ist in diesem Fall nicht wirklich wichtig.

126
00:07:12,830 --> 00:07:14,290
‫Jetzt rechts?

127
00:07:14,290 --> 00:07:16,480
‫Wir sind also eigentlich bereit, dies

128
00:07:16,480 --> 00:07:20,040
‫zu testen, da wir die Route hier bereits zuvor implementiert haben.

129
00:07:20,040 --> 00:07:22,620
‫Und das sind meine Touren.

130
00:07:22,620 --> 00:07:25,750
‫Oh, aber lassen Sie uns diesen Link hier

131
00:07:25,750 --> 00:07:28,240
‫direkt auf der Benutzerkontoseite setzen.

132
00:07:28,240 --> 00:07:31,380
‫Daher sollte diese my-tours natürlich

133
00:07:31,380 --> 00:07:35,066
‫gleich hier im Account einen eigenen Link haben.

134
00:07:35,066 --> 00:07:36,633
‫Also in dieser linken

135
00:07:37,860 --> 00:07:40,777
‫Spalte, also genau hier in Meine Buchungen, also haben

136
00:07:40,777 --> 00:07:42,560
‫wir diese erste hier, die

137
00:07:42,560 --> 00:07:44,949
‫für den Link ist, denken Sie daran.

138
00:07:44,949 --> 00:07:48,800
‫Und so zeigen im Moment im Grunde alle nirgendwo hin, aber jetzt

139
00:07:48,800 --> 00:07:51,453
‫haben wir für die Buchungen tatsächlich einen Link.

140
00:07:51,453 --> 00:07:56,453
‫Und das ist meine-Touren.

141
00:07:57,000 --> 00:07:59,570
‫Und wir hätten es auch Buchungen nennen können,

142
00:07:59,570 --> 00:08:02,053
‫aber das ist sowieso nicht wirklich wichtig.

143
00:08:03,210 --> 00:08:05,630
‫Also, jetzt sind wir bereit, dies zu testen.

144
00:08:05,630 --> 00:08:07,990
‫Melden wir uns tatsächlich von diesem Benutzer

145
00:08:07,990 --> 00:08:11,363
‫ab und melden uns dann als unser anderer Benutzer Laura an.

146
00:08:17,860 --> 00:08:22,380
‫In Ordnung, und sehen wir, was wir hier bekommen, und das

147
00:08:24,111 --> 00:08:26,476
‫dauert viel zu lange, also

148
00:08:26,476 --> 00:08:31,014
‫werfen wir einen Blick auf unseren Code, bearbeiten Sie unser Terminal hier.

149
00:08:31,014 --> 00:08:34,810
‫Okay, hier liegt kein Fehler vor, aber es sieht auch

150
00:08:34,810 --> 00:08:38,390
‫so aus, als ob hier wirklich nichts passiert.

151
00:08:38,390 --> 00:08:42,683
‫Also wird die my-tours-Route hier nicht einmal angezeigt.

152
00:08:43,780 --> 00:08:45,550
‫Um diesen Fehler zu

153
00:08:45,550 --> 00:08:48,600
‫finden, musste ich außerhalb dieses Videos tatsächlich

154
00:08:48,600 --> 00:08:52,304
‫etwas debuggen, weil er wirklich schwer zu finden war, okay.

155
00:08:52,304 --> 00:08:55,330
‫Zuerst gibt es hier einen kleinen Fehler.

156
00:08:55,330 --> 00:08:58,690
‫Das sollte hier also eigentlich User und nicht Tour sein.

157
00:08:58,690 --> 00:09:00,800
‫Also ich habe es damals richtig

158
00:09:00,800 --> 00:09:03,373
‫erklärt, wo ich sagte, dass wir nach dem Benutzer

159
00:09:03,373 --> 00:09:05,811
‫filtern müssen, also Touren, bei denen der Benutzer

160
00:09:05,811 --> 00:09:08,250
‫gleich dem Benutzer ist, der aus der Anfrage kommt,

161
00:09:08,250 --> 00:09:11,690
‫aber dann habe ich es aus irgendeinem Grund hier falsch gemacht, okay?

162
00:09:11,690 --> 00:09:13,904
‫Aber das ist eigentlich nicht der Hauptfehler.

163
00:09:13,904 --> 00:09:17,267
‫Also nicht derjenige, der das Laden der Seite verhindert.

164
00:09:17,267 --> 00:09:19,552
‫Der Fehler, der dazu

165
00:09:19,552 --> 00:09:22,634
‫führt, liegt genau hier im Buchungsmodell.

166
00:09:22,634 --> 00:09:26,810
‫Und es ist hier unten in dieser Pre-Find-Middleware.

167
00:09:26,810 --> 00:09:28,690
‫Und das Problem

168
00:09:28,690 --> 00:09:32,944
‫ist, dass wir hier nie die nächste Middleware aufrufen, oder?

169
00:09:32,944 --> 00:09:36,120
‫Dies ist also wieder eine Pre-Middleware.

170
00:09:36,120 --> 00:09:38,490
‫Und alle Pre-Middlewares haben Zugriff auf die

171
00:09:38,490 --> 00:09:40,620
‫nächste Funktion und so müssen wir

172
00:09:40,620 --> 00:09:42,710
‫am Ende dieser Middleware immer

173
00:09:42,710 --> 00:09:44,370
‫als nächstes aufrufen.

174
00:09:44,370 --> 00:09:48,634
‫Sonst bleibt unser Prozess wirklich stecken, in Ordnung?

175
00:09:48,634 --> 00:09:52,110
‫Also speichern Sie das, können Sie dieses tatsächlich schließen.

176
00:09:52,110 --> 00:09:54,800
‫Und jetzt versuchen wir es noch

177
00:09:56,754 --> 00:09:59,532
‫einmal und jetzt haben wir tatsächlich meine Touren,

178
00:09:59,532 --> 00:10:04,097
‫aber sie ist leer, da dieser Benutzer nie wirklich eine Buchung vorgenommen hat.

179
00:10:04,097 --> 00:10:06,803
‫Also, probieren wir das jetzt aus

180
00:10:08,000 --> 00:10:10,203
‫und buchen den Waldwanderer.

181
00:10:16,070 --> 00:10:18,480
‫Das sollte also noch funktionieren,

182
00:10:18,480 --> 00:10:21,291
‫und das tut es auch sehr schön.

183
00:10:21,291 --> 00:10:24,400
‫Wir haben die E-Mail-Adresse vorformatiert und

184
00:10:24,400 --> 00:10:26,763
‫jetzt wie immer 4242.

185
00:10:28,590 --> 00:10:31,841
‫Also haben wir die Buchung vorher eigentlich mit diesem Benutzer

186
00:10:31,841 --> 00:10:34,710
‫gemacht, aber bevor wir das Buchungsmodell implementiert haben und

187
00:10:35,870 --> 00:10:37,681
‫daher haben wir nie

188
00:10:37,681 --> 00:10:39,893
‫wirklich eine Buchung in unserem System erstellt.

189
00:10:42,150 --> 00:10:44,590
‫Alles klar, also Zahlung

190
00:10:44,590 --> 00:10:49,590
‫akzeptiert und nun mal sehen und los gehts, super!

191
00:10:51,689 --> 00:10:55,200
‫Die Logik, die wir gerade implementiert haben, funktionierte also tatsächlich

192
00:10:55,200 --> 00:10:57,400
‫und das einzige Problem bestand

193
00:10:57,400 --> 00:11:00,020
‫darin, dass der nächste in der Middleware fehlte.

194
00:11:00,020 --> 00:11:03,240
‫Und so haben wir eine weitere Seite

195
00:11:03,240 --> 00:11:05,470
‫unserer dynamischen Website fertiggestellt.

196
00:11:05,470 --> 00:11:09,230
‫Als nächstes müssen Sie an dieser Stelle nur

197
00:11:09,230 --> 00:11:11,513
‫noch die Buchungs-API fertigstellen.

