﻿1
00:00:01,110 --> 00:00:02,100
‫Instrutor: Neste

2
00:00:02,100 --> 00:00:05,090
‫vídeo, vamos construir uma função de fábrica de

3
00:00:05,090 --> 00:00:07,460
‫manipulador para excluir documentos de revisão,

4
00:00:07,460 --> 00:00:10,640
‫mas também documentos de todas as outras coleções,

5
00:00:10,640 --> 00:00:12,713
‫tudo com uma função simples.

6
00:00:14,150 --> 00:00:17,970
‫Portanto, como mencionei no início desta seção, adicionar

7
00:00:17,970 --> 00:00:21,540
‫manipuladores muito semelhantes a todos os nossos

8
00:00:21,540 --> 00:00:25,010
‫controladores criará muitos códigos duplicados, certo?

9
00:00:25,010 --> 00:00:26,880
‫Como todos esses manipuladores de atualização,

10
00:00:26,880 --> 00:00:28,580
‫ou todos esses manipuladores

11
00:00:28,580 --> 00:00:30,420
‫de exclusão, ou todos esses

12
00:00:30,420 --> 00:00:33,640
‫manipuladores de criação, eles realmente parecem basicamente iguais, certo?

13
00:00:33,640 --> 00:00:36,070
‫Além disso, imagine que quiséssemos

14
00:00:36,070 --> 00:00:40,010
‫mudar algum código de status https ou mensagem de status.

15
00:00:40,010 --> 00:00:43,380
‫Em seguida, teríamos que entrar em cada controlador e, em

16
00:00:43,380 --> 00:00:45,900
‫seguida, alterar todos os manipuladores lá.

17
00:00:45,900 --> 00:00:49,470
‫E então, em vez de escrever manualmente todos esses manipuladores,

18
00:00:49,470 --> 00:00:52,410
‫por que não simplesmente criar uma função de fábrica

19
00:00:52,410 --> 00:00:54,830
‫que retornará esses manipuladores para nós?

20
00:00:54,830 --> 00:00:57,710
‫Então, uma função de fábrica é exatamente isso.

21
00:00:57,710 --> 00:01:00,690
‫É uma função que retorna outra função e,

22
00:01:00,690 --> 00:01:02,950
‫neste caso, nossa função de manipulador.

23
00:01:02,950 --> 00:01:06,230
‫Então, para deletar, para criar, para atualizar,

24
00:01:06,230 --> 00:01:08,780
‫e também para ler recursos.

25
00:01:08,780 --> 00:01:13,400
‫Ok e eu sei que todo esse conceito pode ser um pouco complexo

26
00:01:13,400 --> 00:01:14,980
‫para entender, e

27
00:01:14,980 --> 00:01:16,930
‫é por isso que deixei

28
00:01:16,930 --> 00:01:19,350
‫isso para a parte posterior deste curso.

29
00:01:19,350 --> 00:01:21,460
‫Mas agora, acredito que você está

30
00:01:21,460 --> 00:01:23,580
‫realmente pronto para implementar esse tipo de coisa.

31
00:01:23,580 --> 00:01:25,900
‫Portanto, esse tipo de lógica é o

32
00:01:25,900 --> 00:01:28,800
‫que todo desenvolvedor de JavaScript avançado deve ser capaz

33
00:01:28,800 --> 00:01:31,770
‫de implementar e, novamente, acredito que neste ponto do

34
00:01:31,770 --> 00:01:34,860
‫curso você está realmente pronto para começar a usar conceitos

35
00:01:34,860 --> 00:01:36,570
‫avançados como este, certo.

36
00:01:36,570 --> 00:01:39,510
‫Mas chega de conversa, deixe-me mostrar como ele

37
00:01:39,510 --> 00:01:42,860
‫realmente funciona usando o manipulador de exclusão como um primeiro exemplo.

38
00:01:42,860 --> 00:01:47,540
‫E então, na verdade, temos um no controlador de tour,

39
00:01:47,540 --> 00:01:50,063
‫então vamos copiá-lo e exclua

40
00:01:51,410 --> 00:01:52,763
‫o tour.

41
00:01:53,760 --> 00:01:56,490
‫Ok, então copiei basicamente como um

42
00:01:56,490 --> 00:01:58,283
‫modelo para seguirmos.

43
00:01:59,710 --> 00:02:02,770
‫Então, vamos criar um novo arquivo, e vou fazer

44
00:02:02,770 --> 00:02:03,883
‫isso nos controladores.

45
00:02:04,910 --> 00:02:05,743
‫Tudo bem,

46
00:02:07,150 --> 00:02:08,310
‫então manipulador ...

47
00:02:09,990 --> 00:02:11,883
‫fábrica. js.

48
00:02:13,160 --> 00:02:15,690
‫E estou fazendo isso na pasta de

49
00:02:15,690 --> 00:02:18,060
‫controladores, bem porque as funções que vamos

50
00:02:18,060 --> 00:02:20,070
‫escrever aqui basicamente retornarão controladores.

51
00:02:20,070 --> 00:02:21,860
‫E então, para mim, faz muito sentido que

52
00:02:21,860 --> 00:02:23,010
‫você os coloque aqui.

53
00:02:24,530 --> 00:02:26,300
‫Então, vamos apenas copiar esta

54
00:02:26,300 --> 00:02:28,640
‫parte aqui, apenas para mantê-la como referência.

55
00:02:28,640 --> 00:02:32,010
‫Portanto, novamente, o objetivo aqui é basicamente criar uma

56
00:02:32,010 --> 00:02:33,580
‫função, que retornará

57
00:02:33,580 --> 00:02:35,750
‫uma função semelhante a esta aqui.

58
00:02:35,750 --> 00:02:37,870
‫Mas é claro que não apenas para

59
00:02:37,870 --> 00:02:40,670
‫o tour, mas para todos os modelos que temos em

60
00:02:40,670 --> 00:02:42,840
‫nossa aplicação e que possamos ter no futuro.

61
00:02:42,840 --> 00:02:45,270
‫Então essa função precisa ser preparada

62
00:02:45,270 --> 00:02:49,150
‫para isso, e isso significa que dentro da função de

63
00:02:49,150 --> 00:02:51,843
‫fábrica, vamos passar o modelo, tudo bem.

64
00:02:53,760 --> 00:02:55,937
‫Então, vamos chamá-lo de deleteOne.

65
00:02:59,070 --> 00:03:00,960
‫E é chamado assim, de

66
00:03:00,960 --> 00:03:02,830
‫novo, porque esta função não

67
00:03:02,830 --> 00:03:04,610
‫vai funcionar apenas para excluir

68
00:03:04,610 --> 00:03:07,580
‫passeios, mas também para excluir comentários e usuários e

69
00:03:07,580 --> 00:03:09,630
‫no futuro alguns outros documentos que

70
00:03:09,630 --> 00:03:10,923
‫possamos ter.

71
00:03:12,582 --> 00:03:14,750
‫Então, como eu estava dizendo

72
00:03:14,750 --> 00:03:17,680
‫no início, vamos passar o modelo para essa função.

73
00:03:17,680 --> 00:03:21,930
‫Então, passamos o modelo e, em seguida, criamos uma nova função, e essa

74
00:03:21,930 --> 00:03:23,620
‫função imediatamente retornará nossa função

75
00:03:23,620 --> 00:03:26,438
‫assíncrona, então basicamente tudo isso ou função de

76
00:03:26,438 --> 00:03:27,271
‫manipulador assíncrona.

77
00:03:33,580 --> 00:03:37,310
‫Ok, agora tudo o que precisamos fazer é realmente

78
00:03:37,310 --> 00:03:41,663
‫mudar do modelo de ferramenta específico para o modelo mais genérico.

79
00:03:43,685 --> 00:03:48,240
‫Então, aqui também vamos mudar isso do tour para o documento porque,

80
00:03:48,240 --> 00:03:51,890
‫novamente, não saberemos que tipo de documento é esse.

81
00:03:51,890 --> 00:03:54,810
‫Portanto, esta função não saberá realmente se é um tour, ou

82
00:03:54,810 --> 00:03:56,963
‫se é uma revisão, ou um usuário.

83
00:03:58,220 --> 00:04:02,063
‫E então precisamos fazer um tour por tudo isso,

84
00:04:03,760 --> 00:04:05,550
‫e é realmente isso.

85
00:04:05,550 --> 00:04:07,870
‫Então isso basicamente é a

86
00:04:07,870 --> 00:04:11,710
‫generalização dessa função específica, que funcionava apenas para tours, e agora

87
00:04:11,710 --> 00:04:14,263
‫essa nova funciona para todos os modelos.

88
00:04:16,586 --> 00:04:20,420
‫O que também precisamos fazer aqui é importar este catchAsync e

89
00:04:20,420 --> 00:04:21,793
‫também este AppError.

90
00:04:25,040 --> 00:04:26,290
‫Então catchAsync ...

91
00:04:32,630 --> 00:04:35,023
‫e acredito que esteja na pasta de utilitários.

92
00:04:36,280 --> 00:04:40,213
‫E então, não AppError, mas catchAsync.

93
00:04:43,780 --> 00:04:45,030
‫Em seguida, duplique

94
00:04:48,070 --> 00:04:51,243
‫isso aqui, AppError, e isso aqui estará em maiúsculas.

95
00:04:52,320 --> 00:04:54,840
‫Salve e agora estamos prontos para

96
00:04:54,840 --> 00:04:56,323
‫realmente testar isso.

97
00:04:58,240 --> 00:05:01,490
‫Então é assim que vai funcionar,

98
00:05:01,490 --> 00:05:05,333
‫primeiro de tudo precisamos importar aquela fábrica de manipuladores.

99
00:05:06,760 --> 00:05:07,843
‫E então vamos

100
00:05:10,310 --> 00:05:12,560
‫dizer, e vou simplesmente chamá-lo de fábrica aqui.

101
00:05:15,070 --> 00:05:19,730
‫Então, requer, e está na mesma pasta, então fábrica

102
00:05:19,730 --> 00:05:21,113
‫de manipulador.

103
00:05:23,300 --> 00:05:28,110
‫Tudo bem, então vamos comentar este aqui, ou na verdade não

104
00:05:28,110 --> 00:05:29,510
‫tudo isso.

105
00:05:31,380 --> 00:05:34,343
‫Sim, ou na verdade podemos comentar, e

106
00:05:37,300 --> 00:05:41,917
‫assim as novas exportações. excluir tour será ...

107
00:05:45,670 --> 00:05:50,670
‫fábrica. deleteOne e, em seguida, passe o modelo,

108
00:05:50,900 --> 00:05:52,410
‫que é o tour.

109
00:05:52,410 --> 00:05:55,053
‫E é isso, é tudo o que precisamos fazer.

110
00:05:55,960 --> 00:05:58,650
‫Para recapitular muito rapidamente aqui, chamamos

111
00:05:58,650 --> 00:06:01,450
‫essa função deleteOne, aí passamos o

112
00:06:01,450 --> 00:06:03,550
‫modelo, e o que

113
00:06:03,550 --> 00:06:06,520
‫vai acontecer é que essa função retornará

114
00:06:06,520 --> 00:06:09,433
‫imediatamente a função de manipulador que

115
00:06:09,433 --> 00:06:10,773
‫tínhamos antes.

116
00:06:11,630 --> 00:06:15,070
‫Simplesmente o modelo específico, que antes era o tour,

117
00:06:15,070 --> 00:06:17,200
‫agora será substituído por aquele que

118
00:06:17,200 --> 00:06:18,923
‫passamos para a função.

119
00:06:19,920 --> 00:06:23,160
‫E, a propósito, isso funciona por causa dos fechamentos

120
00:06:23,160 --> 00:06:25,690
‫de JavaScript, que é apenas uma maneira

121
00:06:25,690 --> 00:06:28,670
‫elegante de dizer que esta função interna aqui terá

122
00:06:28,670 --> 00:06:30,820
‫acesso às variáveis da função

123
00:06:30,820 --> 00:06:33,643
‫externa, mesmo depois que a externa já retornou.

124
00:06:34,992 --> 00:06:37,370
‫Portanto, chamar essa função aqui retornará

125
00:06:37,370 --> 00:06:39,660
‫outra função, que ficará

126
00:06:39,660 --> 00:06:43,000
‫aqui parada e aguardará até que seja finalmente

127
00:06:43,000 --> 00:06:46,260
‫chamada assim que atingirmos a rota correspondente.

128
00:06:46,260 --> 00:06:48,343
‫E agora vamos tentar exatamente isso.

129
00:06:49,380 --> 00:06:50,873
‫Portanto, exclua o passeio,

130
00:06:52,670 --> 00:06:54,773
‫ok, e vamos escolher um passeio

131
00:06:54,773 --> 00:06:57,580
‫de que realmente não precisamos aqui por enquanto.

132
00:06:57,580 --> 00:06:59,130
‫Então vamos dizer ...

133
00:07:00,050 --> 00:07:01,970
‫agora digamos aqui The Snow

134
00:07:01,970 --> 00:07:03,970
‫Adventurer porque também não possui nenhuma análise.

135
00:07:07,900 --> 00:07:10,133
‫Então, vamos enviar isso, ah

136
00:07:11,230 --> 00:07:14,350
‫e agora não temos permissão para executar a ação,

137
00:07:14,350 --> 00:07:17,633
‫e isso é porque não estamos logados como um administrador.

138
00:07:18,890 --> 00:07:20,413
‫Então, vamos tentar isso,

139
00:07:22,280 --> 00:07:25,913
‫e este é o administrador de que precisamos para estar logado.

140
00:07:27,200 --> 00:07:28,740
‫Ok, então está feito.

141
00:07:28,740 --> 00:07:33,300
‫E agora isso deve funcionar, e de fato funcionou.

142
00:07:33,300 --> 00:07:36,300
‫E isso é a prova de que nossa função de fábrica

143
00:07:36,300 --> 00:07:37,883
‫está realmente fazendo seu trabalho.

144
00:07:38,870 --> 00:07:41,820
‫Ok, porque se você voltar aqui, nós

145
00:07:41,820 --> 00:07:46,530
‫tivemos 10 resultados e agora devemos obter apenas nove, então

146
00:07:46,530 --> 00:07:47,513
‫perfeito.

147
00:07:49,010 --> 00:07:51,510
‫E agora o objetivo é poder usar isso

148
00:07:51,510 --> 00:07:53,373
‫em cada um dos controladores.

149
00:07:54,870 --> 00:07:57,230
‫Então, vamos copiar isso aqui e ir

150
00:07:59,010 --> 00:08:00,483
‫para os comentários.

151
00:08:01,870 --> 00:08:03,670
‫Ah, é claro

152
00:08:04,950 --> 00:08:08,090
‫que precisamos disso aqui, bem no começo,

153
00:08:08,090 --> 00:08:12,320
‫agora bem e agora exportar. deleteReview é igual

154
00:08:15,850 --> 00:08:18,893
‫a fábrica. deleteOne com

155
00:08:22,600 --> 00:08:24,680
‫o modelo de revisão.

156
00:08:24,680 --> 00:08:26,710
‫E é isso, é tudo

157
00:08:26,710 --> 00:08:29,890
‫o que precisamos fazer para implementar o manipulador de exclusão.

158
00:08:29,890 --> 00:08:33,293
‫Agora, é claro, também precisamos especificar o manipulador de rota.

159
00:08:35,640 --> 00:08:39,000
‫Agora, é claro, precisamos especificar a rota em si,

160
00:08:39,000 --> 00:08:41,243
‫então vamos fazer isso aqui também.

161
00:08:43,790 --> 00:08:47,450
‫Então, roteador. rota porque aqui

162
00:08:49,710 --> 00:08:52,553
‫realmente precisamos do parâmetro ID.

163
00:08:55,152 --> 00:09:00,053
‫E agora delete é simplesmente reviewController. deleteReview, e não estou mexendo com a

164
00:09:02,940 --> 00:09:05,970
‫permissão aqui, nem com a autenticação porque por

165
00:09:05,970 --> 00:09:07,910
‫enquanto eu só quero

166
00:09:07,910 --> 00:09:10,190
‫fazer isso funcionar e me preocupar

167
00:09:10,190 --> 00:09:13,053
‫com isso um pouco mais adiante nesta seção.

168
00:09:14,350 --> 00:09:19,350
‫Ok, então vamos fechar essas coisas aqui.

169
00:09:21,590 --> 00:09:23,623
‫Pegue todos os

170
00:09:26,280 --> 00:09:27,113
‫comentários,

171
00:09:29,300 --> 00:09:33,430
‫certo, vamos salvar este e este também.

172
00:09:33,430 --> 00:09:35,890
‫Para que agora possamos começar com uma folha em

173
00:09:37,390 --> 00:09:39,710
‫branco aqui e vamos começar obtendo todas as

174
00:09:39,710 --> 00:09:41,933
‫revisões, para que possamos excluir uma.

175
00:09:42,880 --> 00:09:46,463
‫E então vamos deletar, bem, só esse.

176
00:09:52,663 --> 00:09:55,830
‫Ok, agora também precisamos, é claro,

177
00:10:00,350 --> 00:10:03,563
‫disso e, em seguida, do método delete http.

178
00:10:04,750 --> 00:10:06,900
‫Não precisamos de autorização neste momento,

179
00:10:06,900 --> 00:10:08,840
‫então vamos apenas enviar.

180
00:10:08,840 --> 00:10:11,980
‫E de fato nenhum conteúdo, então 204.

181
00:10:11,980 --> 00:10:14,360
‫E se agora recebermos todas as

182
00:10:14,360 --> 00:10:16,883
‫avaliações, devemos voltar a ter apenas três.

183
00:10:17,730 --> 00:10:22,730
‫Sim, isso funciona, então vamos passar para o próximo.

184
00:10:23,340 --> 00:10:26,203
‫Ok, então comentários, comentários.

185
00:10:28,680 --> 00:10:32,220
‫Vamos pegar essa linha de código aqui e agora finalmente adicioná-la

186
00:10:32,220 --> 00:10:34,183
‫ao controlador de usuário também.

187
00:10:39,130 --> 00:10:42,700
‫Tudo bem, e claro, tudo isso, eu entendo que é

188
00:10:42,700 --> 00:10:45,450
‫um pouco confuso mexer com todos esses arquivos

189
00:10:45,450 --> 00:10:47,200
‫diferentes, mas só precisamos

190
00:10:47,200 --> 00:10:50,190
‫fazer isso uma vez e então terminaremos com

191
00:10:50,190 --> 00:10:51,533
‫toda aquela confusão.

192
00:10:52,636 --> 00:10:55,033
‫Então aqui já tínhamos a exportação. deleteUser, agora

193
00:10:55,986 --> 00:11:00,845
‫tudo o que precisamos fazer é chamar nossa função de fábrica,

194
00:11:00,845 --> 00:11:03,428
‫então deleteOne e então o usuário.

195
00:11:06,220 --> 00:11:09,140
‫Agora, apenas o administrador deve ser capaz

196
00:11:09,140 --> 00:11:12,760
‫de excluir os usuários posteriormente, porque lembre-se de que quando

197
00:11:12,760 --> 00:11:14,750
‫o usuário excluir a

198
00:11:14,750 --> 00:11:17,750
‫si mesmo, eles não serão realmente excluídos, mas

199
00:11:17,750 --> 00:11:20,350
‫apenas o ativo será definido como falso.

200
00:11:20,350 --> 00:11:22,400
‫Mas o administrador, por outro

201
00:11:22,400 --> 00:11:25,710
‫lado, realmente será capaz de excluir o usuário efetivamente do

202
00:11:25,710 --> 00:11:26,940
‫banco de dados.

203
00:11:26,940 --> 00:11:28,550
‫Mas, novamente, vamos nos preocupar

204
00:11:28,550 --> 00:11:31,023
‫com a questão da permissão um pouco mais tarde.

205
00:11:31,980 --> 00:11:35,487
‫Por enquanto, vamos verificar em userRoutes se a

206
00:11:37,057 --> 00:11:39,210
‫rota está realmente implementada,

207
00:11:39,210 --> 00:11:41,560
‫e sim, está aqui embaixo.

208
00:11:41,560 --> 00:11:43,730
‫E como agora

209
00:11:43,730 --> 00:11:47,653
‫implementamos isso, vamos testá-lo aqui novamente no Postman.

210
00:11:49,290 --> 00:11:50,983
‫Então, primeiro vamos salvar este.

211
00:11:54,440 --> 00:11:55,360
‫Assim...

212
00:11:56,210 --> 00:11:59,373
‫exclua a revisão e

213
00:12:02,000 --> 00:12:07,000
‫agora vamos simplesmente copiar isso em

214
00:12:08,420 --> 00:12:10,910
‫outra rota.

215
00:12:10,910 --> 00:12:13,063
‫Exclua e, em seguida, um usuário,

216
00:12:14,340 --> 00:12:16,690
‫mas na verdade não vou fazer isso agora.

217
00:12:17,970 --> 00:12:22,253
‫Tudo que eu quero é apenas obter uma identificação aleatória.

218
00:12:23,350 --> 00:12:26,703
‫Ou, na verdade, vamos apenas criar um

219
00:12:27,780 --> 00:12:31,323
‫novo usuário, então basicamente inscreva-se e exclua-o imediatamente.

220
00:12:32,500 --> 00:12:35,563
‫Então, olá, assim.

221
00:12:38,690 --> 00:12:43,360
‫Pegue todos os usuários, e então é esse cara aqui.

222
00:12:43,360 --> 00:12:46,963
‫E então vamos deletá-lo imediatamente, então enviamos,

223
00:12:48,310 --> 00:12:51,560
‫e não obtemos nenhum conteúdo.

224
00:12:51,560 --> 00:12:53,833
‫E, claro, agora ele deve ter ido embora.

225
00:12:54,840 --> 00:12:56,740
‫Agora, se tentarmos vê-la novamente,

226
00:12:56,740 --> 00:12:58,680
‫basicamente tentando excluir um usuário que

227
00:12:58,680 --> 00:13:01,320
‫não está mais lá, devemos obter um erro.

228
00:13:01,320 --> 00:13:04,673
‫Então, vamos dar uma olhada e, de fato, nenhum documento foi

229
00:13:04,673 --> 00:13:06,330
‫encontrado com esse ID.

230
00:13:06,330 --> 00:13:09,203
‫E isso significa que em nossa função

231
00:13:10,570 --> 00:13:15,550
‫de fábrica, bem aqui, tudo isso, AppError e catchAsync, tudo isso

232
00:13:15,550 --> 00:13:17,240
‫ainda está intacto.

233
00:13:17,240 --> 00:13:20,490
‫Então, tudo ainda funciona da mesma forma que antes.

234
00:13:20,490 --> 00:13:23,283
‫Bem, isso também foi importante testar aqui.

235
00:13:25,670 --> 00:13:27,860
‫Vamos salvar isso rapidamente aqui

236
00:13:27,860 --> 00:13:31,660
‫também, então cada endpoint que estamos implementando, também estou

237
00:13:31,660 --> 00:13:33,810
‫adicionando aqui no

238
00:13:33,810 --> 00:13:36,890
‫Postman porque um pouco mais tarde poderemos

239
00:13:36,890 --> 00:13:39,420
‫realmente criar alguma documentação de API

240
00:13:39,420 --> 00:13:43,970
‫baseada em todos os isso que salvamos aqui no Postman.

241
00:13:43,970 --> 00:13:47,713
‫Portanto, esse é outro recurso útil deste aplicativo.

242
00:13:50,253 --> 00:13:51,960
‫Portanto, excluímos o usuário atual

243
00:13:51,960 --> 00:13:54,520
‫e, novamente, isso é diferente de apenas excluir

244
00:13:54,520 --> 00:13:56,800
‫o usuário, porque este aqui é para

245
00:13:56,800 --> 00:13:59,803
‫administração e este é para o usuário conectado no

246
00:14:00,820 --> 00:14:01,963
‫momento, muito diferente.

247
00:14:03,320 --> 00:14:06,750
‫Ok, então esta foi nossa primeira função de fábrica

248
00:14:06,750 --> 00:14:09,660
‫apenas para excluir e apenas para você entender

249
00:14:09,660 --> 00:14:11,290
‫o próprio conceito.

250
00:14:11,290 --> 00:14:13,740
‫Em seguida, implementaremos funções de

251
00:14:13,740 --> 00:14:16,293
‫fábrica para atualizar e criar documentos.

