﻿1
00:00:01,042 --> 00:00:02,080
‫Instrutor: Neste

2
00:00:02,080 --> 00:00:04,790
‫vídeo, vamos implementar a página minhas reservas.

3
00:00:04,790 --> 00:00:07,200
‫Então, basicamente, vamos renderizar uma boa

4
00:00:07,200 --> 00:00:10,183
‫página contendo todos os passeios que um usuário reservou.

5
00:00:11,950 --> 00:00:15,920
‫E vamos começar adicionando uma nova rota às nossas viewRoutes.

6
00:00:17,120 --> 00:00:21,320
‫Ok, então nós temos a mim e então vamos

7
00:00:21,320 --> 00:00:23,253
‫depois criar os my-tours.

8
00:00:24,720 --> 00:00:29,720
‫Estou duplicando este, my-tours, então também esta rota precisa

9
00:00:29,740 --> 00:00:32,230
‫ser protegida para que apenas

10
00:00:32,230 --> 00:00:34,090
‫usuários logados

11
00:00:34,090 --> 00:00:37,150
‫possam acessar esta página, é claro.

12
00:00:37,150 --> 00:00:39,020
‫E então, em nosso

13
00:00:39,020 --> 00:00:41,723
‫viewsController, teremos um controlador chamado getMyTours.

14
00:00:44,029 --> 00:00:47,480
‫MyTours assim, ok?

15
00:00:47,480 --> 00:00:49,943
‫E é isso por agora,

16
00:00:50,930 --> 00:00:54,123
‫então vamos continuar e criar este controlador agora.

17
00:00:56,090 --> 00:00:59,030
‫Ok, então temos todos esses acessos aqui,

18
00:00:59,030 --> 00:01:02,790
‫faça o tour, obtenha o formulário de login, obtenha a conta.

19
00:01:02,790 --> 00:01:04,853
‫Então, vamos colocar este aqui também.

20
00:01:12,559 --> 00:01:14,690
‫E agora, o que precisamos fazer

21
00:01:14,690 --> 00:01:18,060
‫aqui é encontrar todos os passeios que o usuário reservou.

22
00:01:18,060 --> 00:01:21,050
‫Então, basicamente, primeiro precisamos encontrar todas as reservas para os

23
00:01:21,050 --> 00:01:23,170
‫usuários atualmente logados, o que nos

24
00:01:23,170 --> 00:01:25,620
‫dará um monte de IDs de tour e,

25
00:01:25,620 --> 00:01:28,503
‫em seguida, temos que encontrar os tours com esses IDs.

26
00:01:29,400 --> 00:01:34,400
‫Então, basicamente, localize todas as reservas e, em seguida,

27
00:01:39,790 --> 00:01:44,340
‫localize os passeios com os IDs retornados.

28
00:01:44,340 --> 00:01:48,890
‫Então, basicamente, os IDs das reservas para o usuário, certo?

29
00:01:48,890 --> 00:01:50,720
‫Agora, em vez disso, também

30
00:01:50,720 --> 00:01:53,440
‫poderíamos fazer um preenchimento virtual nos passeios, e

31
00:01:53,440 --> 00:01:55,413
‫seria ótimo se você implementasse

32
00:01:55,413 --> 00:01:59,130
‫isso por conta própria exatamente como fizemos antes com os passeios

33
00:01:59,130 --> 00:02:01,240
‫e as avaliações, mas aqui nesta

34
00:02:01,240 --> 00:02:04,040
‫função eu realmente queria para mostrar como podemos

35
00:02:04,040 --> 00:02:05,710
‫fazer isso manualmente,

36
00:02:05,710 --> 00:02:08,290
‫porque acho que isso também é importante

37
00:02:08,290 --> 00:02:10,067
‫e, na verdade, um populate

38
00:02:10,067 --> 00:02:13,550
‫virtual deve funcionar de maneira semelhante ao que faremos aqui.

39
00:02:13,550 --> 00:02:16,100
‫E então você vê que na verdade precisamos

40
00:02:16,100 --> 00:02:18,070
‫de duas consultas para realmente

41
00:02:18,070 --> 00:02:20,487
‫encontrar os passeios correspondentes às reservas do usuário.

42
00:02:20,487 --> 00:02:22,850
‫De qualquer forma, vamos começar

43
00:02:22,850 --> 00:02:25,753
‫agora, vamos criar uma variável para todas as

44
00:02:28,751 --> 00:02:33,513
‫reservas, aguardar e agora acho que não temos as reservas aqui ainda, não.

45
00:02:37,840 --> 00:02:39,533
‫Portanto, Reservas aqui e bookingModel.

46
00:02:43,010 --> 00:02:47,890
‫E aqui, é claro, é apenas uma reserva, certo.

47
00:02:47,890 --> 00:02:52,890
‫Portanto, aguarde a reserva. encontre, e agora lembre-se que

48
00:02:53,530 --> 00:02:58,380
‫cada documento de reserva possui um ID de usuário, certo?

49
00:02:58,380 --> 00:03:00,160
‫Portanto, aqui no esquema, lembre-se

50
00:03:00,160 --> 00:03:02,331
‫de que temos o ID do tour,

51
00:03:02,331 --> 00:03:04,410
‫o ID do usuário e todos esses

52
00:03:04,410 --> 00:03:05,870
‫outros dados, então o

53
00:03:05,870 --> 00:03:09,400
‫que vamos fazer agora é basicamente consultar pelo ID do usuário, certo?

54
00:03:09,400 --> 00:03:10,940
‫E então isso vai

55
00:03:10,940 --> 00:03:15,136
‫nos retornar todos os tours que pertencem ao usuário atual, ok?

56
00:03:15,136 --> 00:03:16,653
‫Então, não este.

57
00:03:20,650 --> 00:03:23,900
‫Portanto, o tour deve ser igual a req. do utilizador. identificação.

58
00:03:29,170 --> 00:03:33,790
‫Então aqui assíncrono e, como sempre, catchAsync também.

59
00:03:37,000 --> 00:03:39,440
‫Portanto, essas reservas agora contêm todos os documentos

60
00:03:39,440 --> 00:03:41,810
‫de reserva do usuário atual, mas na

61
00:03:41,810 --> 00:03:44,690
‫verdade isso apenas nos fornece os IDs de passeio.

62
00:03:44,690 --> 00:03:48,350
‫E agora queremos encontrar os passeios com os IDs retornados.

63
00:03:48,350 --> 00:03:50,500
‫A próxima etapa é

64
00:03:50,500 --> 00:03:52,976
‫basicamente criar uma matriz de todos

65
00:03:52,976 --> 00:03:55,430
‫os IDs e, depois dessa consulta,

66
00:03:55,430 --> 00:03:58,512
‫os tours que têm um desses IDs, certo?

67
00:03:58,512 --> 00:04:00,950
‫E isso fará um pouco mais de

68
00:04:00,950 --> 00:04:03,973
‫sentido assim que implementarmos o que acabei de explicar.

69
00:04:04,830 --> 00:04:09,347
‫TourIDs é igual a reservas e agora vamos usar um mapa

70
00:04:09,347 --> 00:04:11,240
‫para criar uma nova matriz

71
00:04:11,240 --> 00:04:14,630
‫baseada em uma função de retorno de chamada

72
00:04:15,700 --> 00:04:17,530
‫que é esta, então

73
00:04:17,530 --> 00:04:22,300
‫o el atual. Tour. identificação.

74
00:04:22,300 --> 00:04:25,200
‫Então, o que isso vai fazer?

75
00:04:25,200 --> 00:04:28,630
‫Bem, basicamente, isso faz um loop por toda a matriz de reservas

76
00:04:28,630 --> 00:04:32,760
‫e em cada elemento pegará o el. Tour.

77
00:04:32,760 --> 00:04:35,130
‫E, na verdade, nem precisamos do ID

78
00:04:35,130 --> 00:04:39,210
‫aqui porque o passeio em si já é o ID do passeio, certo?

79
00:04:39,210 --> 00:04:41,460
‫Então, no final, temos uma bela matriz

80
00:04:41,460 --> 00:04:44,330
‫com todos os IDs de passeio aqui e isso

81
00:04:44,330 --> 00:04:45,980
‫porque usamos um mapa.

82
00:04:49,640 --> 00:04:52,500
‫Ok, então, tendo todos os IDs de

83
00:04:52,500 --> 00:04:56,233
‫passeio, podemos realmente obter os passeios correspondentes a esses IDs.

84
00:04:58,640 --> 00:05:03,640
‫Portanto, aguarde o Tour. find e realmente queremos encontrar por ID, mas

85
00:05:07,380 --> 00:05:09,953
‫não podemos usar o. findbyid porque

86
00:05:10,900 --> 00:05:14,120
‫aqui realmente precisaremos de um novo operador.

87
00:05:14,120 --> 00:05:15,470
‫E a dita operadora,

88
00:05:15,470 --> 00:05:17,630
‫que não tenho certeza se já usamos

89
00:05:17,630 --> 00:05:18,713
‫antes, é chamada.

90
00:05:20,370 --> 00:05:21,810
‫Então, em tourIDs.

91
00:05:24,320 --> 00:05:26,330
‫Então, basicamente o que

92
00:05:26,330 --> 00:05:28,370
‫isso fará em vez de selecionar

93
00:05:28,370 --> 00:05:33,370
‫todos os passeios que possuem um ID que está na matriz tourIDs, certo?

94
00:05:33,520 --> 00:05:35,277
‫Isso é bastante

95
00:05:35,277 --> 00:05:37,618
‫direto, mas é muito bom saber

96
00:05:37,618 --> 00:05:41,720
‫que podemos usar isso muito útil no operador aqui, certo?

97
00:05:41,720 --> 00:05:43,770
‫E esse é realmente um dos

98
00:05:43,770 --> 00:05:45,620
‫motivos pelos quais eu quis

99
00:05:45,620 --> 00:05:49,200
‫fazer isso manualmente em vez de apenas preencher virtual como fizemos antes.

100
00:05:49,200 --> 00:05:51,760
‫Mas, novamente, seria bom se você fosse

101
00:05:51,760 --> 00:05:53,760
‫em frente e realmente implementasse

102
00:05:53,760 --> 00:05:55,823
‫isso apenas para se divertir, sabe.

103
00:05:57,060 --> 00:05:58,860
‫Ok, e com isso

104
00:05:58,860 --> 00:06:01,593
‫temos nossos tours prontos para serem renderizados.

105
00:06:03,330 --> 00:06:07,385
‫Então, res. status como

106
00:06:07,385 --> 00:06:11,230
‫sempre, e então renderizá-los, certo?

107
00:06:11,230 --> 00:06:14,100
‫E, na verdade, nem precisamos de um novo modelo para isso.

108
00:06:14,100 --> 00:06:17,383
‫Vamos simplesmente reutilizar a visão geral, certo?

109
00:06:19,670 --> 00:06:21,300
‫Então, vamos acabar com uma

110
00:06:21,300 --> 00:06:23,530
‫página que se parece muito com a

111
00:06:23,530 --> 00:06:26,923
‫visão geral, mas apenas com os passeios que o usuário reservou.

112
00:06:27,820 --> 00:06:30,456
‫Então, aqui em cima e para ter

113
00:06:30,456 --> 00:06:34,180
‫uma visão geral, nós realmente passamos em todos os tours, ok?

114
00:06:34,180 --> 00:06:36,510
‫Então, basicamente, todos eles.

115
00:06:36,510 --> 00:06:38,960
‫E agora, vamos ter algo muito

116
00:06:38,960 --> 00:06:42,113
‫semelhante, mas é claro, apenas passando nos tours agendados.

117
00:06:42,113 --> 00:06:43,653
‫Então, onde fica isso?

118
00:06:47,450 --> 00:06:51,813
‫Tudo bem, então o título será My Tours,

119
00:06:56,050 --> 00:06:59,640
‫e novamente passando na variável tours.

120
00:06:59,640 --> 00:07:01,680
‫Ok e deve ser isso.

121
00:07:01,680 --> 00:07:03,810
‫Claro que também poderíamos ter criado

122
00:07:03,810 --> 00:07:06,550
‫um cartão totalmente novo para essas livrarias com

123
00:07:06,550 --> 00:07:08,250
‫algumas informações mais relevantes

124
00:07:08,250 --> 00:07:10,080
‫sobre cada uma das reservas,

125
00:07:10,080 --> 00:07:12,830
‫mas neste caso isso não é realmente importante.

126
00:07:12,830 --> 00:07:14,290
‫Agora está certo?

127
00:07:14,290 --> 00:07:16,480
‫Então, estamos prontos para

128
00:07:16,480 --> 00:07:20,040
‫testar isso porque já implementamos a rota aqui antes.

129
00:07:20,040 --> 00:07:22,620
‫E então esse é o meu tour.

130
00:07:22,620 --> 00:07:25,750
‫Oh, mas na verdade vamos definir este link aqui

131
00:07:25,750 --> 00:07:28,240
‫na página da conta do usuário.

132
00:07:28,240 --> 00:07:31,380
‫Portanto, este my-tours deve ter

133
00:07:31,380 --> 00:07:35,066
‫seu próprio link aqui mesmo na conta.

134
00:07:35,066 --> 00:07:36,633
‫Na coluna da

135
00:07:37,860 --> 00:07:40,777
‫esquerda, aqui mesmo em Minhas reservas, temos

136
00:07:40,777 --> 00:07:42,560
‫esta primeira aqui que

137
00:07:42,560 --> 00:07:44,949
‫é para o link, lembre-se.

138
00:07:44,949 --> 00:07:48,800
‫E agora, basicamente, todos eles apontam para nenhum lugar, mas agora,

139
00:07:48,800 --> 00:07:51,453
‫para as reservas, temos um link.

140
00:07:51,453 --> 00:07:56,453
‫E então esse é o meu tour.

141
00:07:57,000 --> 00:07:59,570
‫E poderíamos ter chamado de reservas também, mas isso

142
00:07:59,570 --> 00:08:02,053
‫não é realmente importante de qualquer maneira.

143
00:08:03,210 --> 00:08:05,630
‫Então, agora estamos prontos para testar isso.

144
00:08:05,630 --> 00:08:07,990
‫Vamos realmente fazer logoff desse usuário

145
00:08:07,990 --> 00:08:11,363
‫e, em seguida, fazer logon como nosso outro usuário, Laura.

146
00:08:17,860 --> 00:08:22,380
‫Tudo bem, então vamos ver o que temos aqui e

147
00:08:24,111 --> 00:08:26,476
‫isso está demorando muito, então

148
00:08:26,476 --> 00:08:31,014
‫vamos dar uma olhada em nosso código, editar nosso terminal aqui.

149
00:08:31,014 --> 00:08:34,810
‫Ok, então não há nenhum erro aqui, mas também

150
00:08:34,810 --> 00:08:38,390
‫parece que nada está realmente acontecendo aqui.

151
00:08:38,390 --> 00:08:42,683
‫Então, a rota my-tours aqui nem aparece, certo.

152
00:08:43,780 --> 00:08:45,550
‫Agora, para encontrar esse

153
00:08:45,550 --> 00:08:48,600
‫bug, eu realmente tive que fazer alguma depuração

154
00:08:48,600 --> 00:08:52,304
‫fora deste vídeo porque foi realmente difícil de encontrar, ok.

155
00:08:52,304 --> 00:08:55,330
‫Primeiro, há um pequeno erro aqui.

156
00:08:55,330 --> 00:08:58,690
‫Portanto, este aqui deve ser de fato um usuário e não um tour.

157
00:08:58,690 --> 00:09:00,800
‫Então eu expliquei bem naquela

158
00:09:00,800 --> 00:09:03,373
‫época, onde falei que precisamos filtrar por

159
00:09:03,373 --> 00:09:05,811
‫usuário, então tours onde o usuário

160
00:09:05,811 --> 00:09:08,250
‫é igual ao usuário vindo da requisição,

161
00:09:08,250 --> 00:09:11,690
‫mas aí por algum motivo eu fiz errado aqui, ok?

162
00:09:11,690 --> 00:09:13,904
‫Mas esse não é o bug principal, na verdade.

163
00:09:13,904 --> 00:09:17,267
‫Portanto, não é aquele que impede a página de realmente carregar.

164
00:09:17,267 --> 00:09:19,552
‫O erro que faz com que

165
00:09:19,552 --> 00:09:22,634
‫isso aconteça está bem aqui no modelo de reserva.

166
00:09:22,634 --> 00:09:26,810
‫E está aqui neste middleware de pré-descoberta.

167
00:09:26,810 --> 00:09:28,690
‫E o problema

168
00:09:28,690 --> 00:09:32,944
‫é que nunca chamamos o próximo middleware aqui, certo?

169
00:09:32,944 --> 00:09:36,120
‫Então, novamente, este é um pré-middleware.

170
00:09:36,120 --> 00:09:38,490
‫E todos os pré-middlewares têm acesso à

171
00:09:38,490 --> 00:09:40,620
‫próxima função e então, ao final

172
00:09:40,620 --> 00:09:42,710
‫desses middlewares, sempre temos que

173
00:09:42,710 --> 00:09:44,370
‫chamar o próximo.

174
00:09:44,370 --> 00:09:48,634
‫Caso contrário, nosso processo realmente travará, certo?

175
00:09:48,634 --> 00:09:52,110
‫Então, salve isso, pode realmente fechar este aqui.

176
00:09:52,110 --> 00:09:54,800
‫E agora vamos tentar de

177
00:09:56,754 --> 00:09:59,532
‫novo e agora realmente temos meus

178
00:09:59,532 --> 00:10:04,097
‫tours, mas está vazio porque este usuário nunca fez uma reserva.

179
00:10:04,097 --> 00:10:06,803
‫Então, vamos tentar isso agora, e vamos

180
00:10:08,000 --> 00:10:10,203
‫agendar o caminhante da floresta.

181
00:10:16,070 --> 00:10:18,480
‫Então, isso ainda deve estar

182
00:10:18,480 --> 00:10:21,291
‫funcionando, e de fato está, muito bom.

183
00:10:21,291 --> 00:10:24,400
‫Temos o endereço de email pré-formatado e

184
00:10:24,400 --> 00:10:26,763
‫agora, como sempre, 4242.

185
00:10:28,590 --> 00:10:31,841
‫Então, na verdade, fizemos a reserva antes com esse

186
00:10:31,841 --> 00:10:34,710
‫usuário, mas antes de implementarmos o modelo de

187
00:10:35,870 --> 00:10:37,681
‫reserva e, portanto, nunca

188
00:10:37,681 --> 00:10:39,893
‫criamos uma reserva em nosso sistema.

189
00:10:42,150 --> 00:10:44,590
‫Certo, pagamento aceito

190
00:10:44,590 --> 00:10:49,590
‫e agora vamos ver e vamos lá, ótimo!

191
00:10:51,689 --> 00:10:55,200
‫Essa lógica que acabamos de implementar realmente funcionou e,

192
00:10:55,200 --> 00:10:57,400
‫portanto, o único problema

193
00:10:57,400 --> 00:11:00,020
‫era a próxima falta no middleware.

194
00:11:00,020 --> 00:11:03,240
‫E assim, completamos mais uma página

195
00:11:03,240 --> 00:11:05,470
‫do nosso site dinâmico.

196
00:11:05,470 --> 00:11:09,230
‫E a seguir, tudo o que realmente resta a fazer neste ponto

197
00:11:09,230 --> 00:11:11,513
‫é terminar a API de reservas.

