﻿1
00:00:01,110 --> 00:00:02,100
‫Instructor: En

2
00:00:02,100 --> 00:00:05,090
‫este video, crearemos una función de fábrica de

3
00:00:05,090 --> 00:00:07,460
‫controladores para eliminar documentos de revisión,

4
00:00:07,460 --> 00:00:10,640
‫pero también documentos de todas las demás colecciones,

5
00:00:10,640 --> 00:00:12,713
‫todo con una función simple.

6
00:00:14,150 --> 00:00:17,970
‫Entonces, como mencioné al principio de esta sección, agregar

7
00:00:17,970 --> 00:00:21,540
‫controladores muy similares a todos nuestros controladores creará

8
00:00:21,540 --> 00:00:25,010
‫una gran cantidad de código duplicado, ¿verdad?

9
00:00:25,010 --> 00:00:26,880
‫Debido a que todos estos controladores

10
00:00:26,880 --> 00:00:28,580
‫de actualización, o todos

11
00:00:28,580 --> 00:00:30,420
‫estos controladores de eliminación, o todos

12
00:00:30,420 --> 00:00:33,640
‫estos controladores de creación, realmente todos se ven básicamente iguales, ¿verdad?

13
00:00:33,640 --> 00:00:36,070
‫Además, imagine que quisiéramos cambiar como

14
00:00:36,070 --> 00:00:40,010
‫un código de estado https o un mensaje de estado.

15
00:00:40,010 --> 00:00:43,380
‫Luego tendríamos que ir a todos y cada uno de los

16
00:00:43,380 --> 00:00:45,900
‫controladores y luego cambiar todos los controladores allí.

17
00:00:45,900 --> 00:00:49,470
‫Entonces, en lugar de escribir manualmente todos estos controladores, ¿por

18
00:00:49,470 --> 00:00:52,410
‫qué no simplemente crear una función de fábrica

19
00:00:52,410 --> 00:00:54,830
‫que nos devolverá estos controladores?

20
00:00:54,830 --> 00:00:57,710
‫Entonces, una función de fábrica es exactamente eso.

21
00:00:57,710 --> 00:01:00,690
‫Es una función que devuelve otra función, y en

22
00:01:00,690 --> 00:01:02,950
‫este caso nuestra función de controlador.

23
00:01:02,950 --> 00:01:06,230
‫Entonces, para borrar, para crear, para actualizar

24
00:01:06,230 --> 00:01:08,780
‫y también para leer recursos.

25
00:01:08,780 --> 00:01:13,400
‫Está bien, y sé que todo este concepto puede ser un poco complejo de

26
00:01:13,400 --> 00:01:14,980
‫entender, y esa es

27
00:01:14,980 --> 00:01:16,930
‫la razón por la que dejé

28
00:01:16,930 --> 00:01:19,350
‫esto para la última parte de este curso.

29
00:01:19,350 --> 00:01:21,460
‫Pero ahora, creo que estás

30
00:01:21,460 --> 00:01:23,580
‫listo para implementar este tipo de cosas.

31
00:01:23,580 --> 00:01:25,900
‫Entonces, este tipo de lógica es lo

32
00:01:25,900 --> 00:01:28,800
‫que todo desarrollador avanzado de JavaScript debería poder implementar,

33
00:01:28,800 --> 00:01:31,770
‫y nuevamente creo que en este punto del curso

34
00:01:31,770 --> 00:01:34,860
‫estás realmente listo para comenzar a usar un concepto avanzado

35
00:01:34,860 --> 00:01:36,570
‫como este, de acuerdo.

36
00:01:36,570 --> 00:01:39,510
‫Pero ya hablemos, déjame mostrarte cómo funciona

37
00:01:39,510 --> 00:01:42,860
‫realmente usando el controlador de eliminación como primer ejemplo.

38
00:01:42,860 --> 00:01:47,540
‫Entonces, en realidad, tenemos uno en el controlador de recorrido, así que

39
00:01:47,540 --> 00:01:50,063
‫sigamos y copiemos ese, así que

40
00:01:51,410 --> 00:01:52,763
‫elimine el recorrido.

41
00:01:53,760 --> 00:01:56,490
‫Bien, lo copié básicamente como una

42
00:01:56,490 --> 00:01:58,283
‫plantilla a seguir.

43
00:01:59,710 --> 00:02:02,770
‫Así que creemos un nuevo archivo, y lo haré

44
00:02:02,770 --> 00:02:03,883
‫en los controladores.

45
00:02:04,910 --> 00:02:05,743
‫Muy

46
00:02:07,150 --> 00:02:08,310
‫bien, manejador ...

47
00:02:09,990 --> 00:02:11,883
‫fábrica. js.

48
00:02:13,160 --> 00:02:15,690
‫Y estoy haciendo esto en la carpeta de

49
00:02:15,690 --> 00:02:18,060
‫controladores, bueno porque las funciones que vamos a

50
00:02:18,060 --> 00:02:20,070
‫escribir aquí básicamente devolverán controladores.

51
00:02:20,070 --> 00:02:21,860
‫Entonces, para mí, tiene mucho sentido que

52
00:02:21,860 --> 00:02:23,010
‫los pongas aquí.

53
00:02:24,530 --> 00:02:26,300
‫Así que copiemos esta

54
00:02:26,300 --> 00:02:28,640
‫parte aquí, solo para mantenerla como referencia.

55
00:02:28,640 --> 00:02:32,010
‫Entonces, nuevamente, el objetivo aquí es básicamente crear una función,

56
00:02:32,010 --> 00:02:33,580
‫que luego devolverá una

57
00:02:33,580 --> 00:02:35,750
‫función que se parece a esta aquí.

58
00:02:35,750 --> 00:02:37,870
‫Pero, por supuesto, no solo para

59
00:02:37,870 --> 00:02:40,670
‫el recorrido, sino para cada modelo que tenemos en nuestra

60
00:02:40,670 --> 00:02:42,840
‫aplicación y que podríamos tener en el futuro.

61
00:02:42,840 --> 00:02:45,270
‫Entonces, esta función debe estar preparada

62
00:02:45,270 --> 00:02:49,150
‫para eso, y lo que eso significa es que dentro de la

63
00:02:49,150 --> 00:02:51,843
‫función de fábrica, pasaremos el modelo, de acuerdo.

64
00:02:53,760 --> 00:02:55,937
‫Así que llamemos a este deleteOne.

65
00:02:59,070 --> 00:03:00,960
‫Y se llama así, nuevamente, porque

66
00:03:00,960 --> 00:03:02,830
‫esta función no solo va

67
00:03:02,830 --> 00:03:04,610
‫a funcionar para eliminar recorridos,

68
00:03:04,610 --> 00:03:07,580
‫sino también para eliminar reseñas y usuarios y en

69
00:03:07,580 --> 00:03:09,630
‫el futuro algunos otros documentos que

70
00:03:09,630 --> 00:03:10,923
‫también podamos tener.

71
00:03:12,582 --> 00:03:14,750
‫Entonces, como decía al

72
00:03:14,750 --> 00:03:17,680
‫principio, pasaremos el modelo a esta función.

73
00:03:17,680 --> 00:03:21,930
‫Entonces pasamos el modelo y luego creamos una nueva función, y esa función de

74
00:03:21,930 --> 00:03:23,620
‫inmediato devolverá nuestra función asíncrona,

75
00:03:23,620 --> 00:03:26,438
‫así que básicamente todo esto o la función de

76
00:03:26,438 --> 00:03:27,271
‫controlador asíncrono.

77
00:03:33,580 --> 00:03:37,310
‫Bien, y ahora todo lo que tenemos que hacer

78
00:03:37,310 --> 00:03:41,663
‫es cambiar realmente del modelo de herramienta específico al modelo más genérico.

79
00:03:43,685 --> 00:03:48,240
‫Entonces aquí también cambiaremos esto de tour al documento porque, nuevamente,

80
00:03:48,240 --> 00:03:51,890
‫no sabremos qué tipo de documento es este.

81
00:03:51,890 --> 00:03:54,810
‫Por lo que esta función no sabrá realmente si se trata de un recorrido,

82
00:03:54,810 --> 00:03:56,963
‫si se trata de una reseña o de un usuario.

83
00:03:58,220 --> 00:04:02,063
‫Así que tenemos que sacar la gira de todo esto,

84
00:04:03,760 --> 00:04:05,550
‫y eso es todo.

85
00:04:05,550 --> 00:04:07,870
‫Así que esta es básicamente la

86
00:04:07,870 --> 00:04:11,710
‫generalización de esta función específica, que solo funcionaba para recorridos, y ahora

87
00:04:11,710 --> 00:04:14,263
‫esta nueva funciona para todos los modelos.

88
00:04:16,586 --> 00:04:20,420
‫Lo que también debemos hacer aquí es importar este catchAsync y

89
00:04:20,420 --> 00:04:21,793
‫también este AppError.

90
00:04:25,040 --> 00:04:26,290
‫Así que catchAsync ...

91
00:04:32,630 --> 00:04:35,023
‫y creo que está en la carpeta de utilidades.

92
00:04:36,280 --> 00:04:40,213
‫Y luego, no AppError sino catchAsync.

93
00:04:43,780 --> 00:04:45,030
‫Luego, duplique esto

94
00:04:48,070 --> 00:04:51,243
‫aquí, AppError, y esto aquí está en mayúsculas.

95
00:04:52,320 --> 00:04:54,840
‫Déjelo guardar, y ahora estamos listos

96
00:04:54,840 --> 00:04:56,323
‫para probarlo.

97
00:04:58,240 --> 00:05:01,490
‫Así es como va a funcionar, en

98
00:05:01,490 --> 00:05:05,333
‫primer lugar tenemos que importar esa fábrica de manipuladores.

99
00:05:06,760 --> 00:05:07,843
‫Y digamos,

100
00:05:10,310 --> 00:05:12,560
‫y simplemente lo llamaré fábrica aquí.

101
00:05:15,070 --> 00:05:19,730
‫Así que require, y está en la misma carpeta, así que

102
00:05:19,730 --> 00:05:21,113
‫handler factory.

103
00:05:23,300 --> 00:05:28,110
‫Muy bien y comentemos esto aquí, o en realidad no

104
00:05:28,110 --> 00:05:29,510
‫todo esto.

105
00:05:31,380 --> 00:05:34,343
‫Sí, o en realidad podemos comentarlo,

106
00:05:37,300 --> 00:05:41,917
‫y las nuevas exportaciones. elimina el recorrido será ...

107
00:05:45,670 --> 00:05:50,670
‫fábrica. deleteOne y luego pase el modelo,

108
00:05:50,900 --> 00:05:52,410
‫que es tour.

109
00:05:52,410 --> 00:05:55,053
‫Y eso es todo, eso es todo lo que tenemos que hacer.

110
00:05:55,960 --> 00:05:58,650
‫Entonces, para recapitular muy rápidamente aquí,

111
00:05:58,650 --> 00:06:01,450
‫llamamos a esta función deleteOne, luego

112
00:06:01,450 --> 00:06:03,550
‫pasamos el modelo, y lo

113
00:06:03,550 --> 00:06:06,520
‫que sucederá es que esta función devolverá

114
00:06:06,520 --> 00:06:09,433
‫de inmediato esta función de controlador que

115
00:06:09,433 --> 00:06:10,773
‫teníamos antes.

116
00:06:11,630 --> 00:06:15,070
‫Simplemente el modelo específico, que antes era el tour,

117
00:06:15,070 --> 00:06:17,200
‫ahora será reemplazado por el que

118
00:06:17,200 --> 00:06:18,923
‫pasamos a la función.

119
00:06:19,920 --> 00:06:23,160
‫Y, por cierto, esto funciona debido a los cierres de

120
00:06:23,160 --> 00:06:25,690
‫JavaScript, que es solo una forma elegante de

121
00:06:25,690 --> 00:06:28,670
‫decir que esta función interna aquí tendrá acceso a las

122
00:06:28,670 --> 00:06:30,820
‫variables de la función externa

123
00:06:30,820 --> 00:06:33,643
‫incluso después de que la externa ya haya regresado.

124
00:06:34,992 --> 00:06:37,370
‫Entonces, llamar a esta función aquí

125
00:06:37,370 --> 00:06:39,660
‫devolverá otra función, que luego

126
00:06:39,660 --> 00:06:43,000
‫se sentará aquí y esperará hasta que finalmente se

127
00:06:43,000 --> 00:06:46,260
‫llame tan pronto como lleguemos a la ruta correspondiente.

128
00:06:46,260 --> 00:06:48,343
‫Y ahora intentemos exactamente eso.

129
00:06:49,380 --> 00:06:50,873
‫Así que elimine el

130
00:06:52,670 --> 00:06:54,773
‫recorrido, está bien, y elijamos un

131
00:06:54,773 --> 00:06:57,580
‫recorrido que realmente no necesitemos aquí por ahora.

132
00:06:57,580 --> 00:06:59,130
‫Así que digamos ...

133
00:07:00,050 --> 00:07:01,970
‫ahora digamos aquí The

134
00:07:01,970 --> 00:07:03,970
‫Snow Adventurer porque tampoco tiene reseñas.

135
00:07:07,900 --> 00:07:10,133
‫Así que enviemos eso, oh,

136
00:07:11,230 --> 00:07:14,350
‫y ahora no tenemos permiso para realizar la acción,

137
00:07:14,350 --> 00:07:17,633
‫y eso es porque no estamos conectados como administradores.

138
00:07:18,890 --> 00:07:20,413
‫Intentémoslo, y este

139
00:07:22,280 --> 00:07:25,913
‫es el administrador al que debemos iniciar sesión.

140
00:07:27,200 --> 00:07:28,740
‫Bien, eso está hecho.

141
00:07:28,740 --> 00:07:33,300
‫Y ahora esto debería funcionar, y de hecho funcionó.

142
00:07:33,300 --> 00:07:36,300
‫Y eso es una prueba de que nuestra función de fábrica

143
00:07:36,300 --> 00:07:37,883
‫realmente está haciendo su trabajo.

144
00:07:38,870 --> 00:07:41,820
‫Está bien, porque si ahora regresa

145
00:07:41,820 --> 00:07:46,530
‫aquí, obtuvimos 10 resultados y ahora solo obtendríamos nueve, tan

146
00:07:46,530 --> 00:07:47,513
‫perfecto.

147
00:07:49,010 --> 00:07:51,510
‫Y ahora el objetivo es poder usar esto en todos

148
00:07:51,510 --> 00:07:53,373
‫y cada uno de los controladores.

149
00:07:54,870 --> 00:07:57,230
‫Copiemos esto aquí y vayamos

150
00:07:59,010 --> 00:08:00,483
‫a las reseñas.

151
00:08:01,870 --> 00:08:03,670
‫Ah, y por

152
00:08:04,950 --> 00:08:08,090
‫supuesto que lo necesitamos aquí, al principio,

153
00:08:08,090 --> 00:08:12,320
‫ahora bien, y ahora exportar. deleteReview es igual a

154
00:08:15,850 --> 00:08:18,893
‫la fábrica. deleteOne con

155
00:08:22,600 --> 00:08:24,680
‫el modelo de revisión.

156
00:08:24,680 --> 00:08:26,710
‫Y eso es todo, eso es

157
00:08:26,710 --> 00:08:29,890
‫todo lo que necesitamos hacer para implementar el controlador de eliminación.

158
00:08:29,890 --> 00:08:33,293
‫Ahora, por supuesto, también necesitamos especificar el controlador de ruta.

159
00:08:35,640 --> 00:08:39,000
‫Ahora, por supuesto, necesitamos especificar la ruta en sí,

160
00:08:39,000 --> 00:08:41,243
‫así que hagámoslo aquí también.

161
00:08:43,790 --> 00:08:47,450
‫Entonces enrutador. route porque aquí

162
00:08:49,710 --> 00:08:52,553
‫realmente necesitamos el parámetro ID.

163
00:08:55,152 --> 00:09:00,053
‫Y ahora eliminar es simplemente reviewController. deleteReview, y no estoy jugando con el

164
00:09:02,940 --> 00:09:05,970
‫permiso aquí, ni con la autenticación porque por ahora

165
00:09:05,970 --> 00:09:07,910
‫solo quiero hacer que

166
00:09:07,910 --> 00:09:10,190
‫esto funcione y preocuparme por esas

167
00:09:10,190 --> 00:09:13,053
‫cosas un poco más adelante en esta sección.

168
00:09:14,350 --> 00:09:19,350
‫Bien, cerremos esto de aquí.

169
00:09:21,590 --> 00:09:23,623
‫Así que obtenga todas

170
00:09:26,280 --> 00:09:27,113
‫las

171
00:09:29,300 --> 00:09:33,430
‫reseñas, de acuerdo, guardemos esta y esta también.

172
00:09:33,430 --> 00:09:35,890
‫De modo que ahora podemos comenzar con una hoja en

173
00:09:37,390 --> 00:09:39,710
‫blanco aquí y comencemos por obtener todas las revisiones,

174
00:09:39,710 --> 00:09:41,933
‫de modo que ahora podamos eliminar una.

175
00:09:42,880 --> 00:09:46,463
‫Y entonces eliminemos, bueno, solo este.

176
00:09:52,663 --> 00:09:55,830
‫Bien, ahora también necesitamos, por supuesto,

177
00:10:00,350 --> 00:10:03,563
‫esto, y luego el método de eliminación http.

178
00:10:04,750 --> 00:10:06,900
‫No necesitamos autorización en este

179
00:10:06,900 --> 00:10:08,840
‫momento, así que enviémosla.

180
00:10:08,840 --> 00:10:11,980
‫Y de hecho no hay contenido, así que 204.

181
00:10:11,980 --> 00:10:14,360
‫Y si ahora obtenemos todas las

182
00:10:14,360 --> 00:10:16,883
‫revisiones, entonces deberíamos volver a tener solo tres.

183
00:10:17,730 --> 00:10:22,730
‫Sí, eso funciona, así que pasemos al siguiente.

184
00:10:23,340 --> 00:10:26,203
‫De acuerdo, reseñas, reseñas.

185
00:10:28,680 --> 00:10:32,220
‫Consigamos esta línea de código aquí y ahora finalmente agréguela

186
00:10:32,220 --> 00:10:34,183
‫también al controlador de usuario.

187
00:10:39,130 --> 00:10:42,700
‫Está bien, y por supuesto todo esto, entiendo que ahora

188
00:10:42,700 --> 00:10:45,450
‫es un poco confuso jugar con todos estos

189
00:10:45,450 --> 00:10:47,200
‫archivos diferentes, pero solo

190
00:10:47,200 --> 00:10:50,190
‫tenemos que hacerlo una vez y luego terminamos con

191
00:10:50,190 --> 00:10:51,533
‫toda esa confusión.

192
00:10:52,636 --> 00:10:55,033
‫Entonces aquí ya teníamos la exportación. deleteUser, ahora

193
00:10:55,986 --> 00:11:00,845
‫todo lo que tenemos que hacer es llamar a nuestra función de fábrica,

194
00:11:00,845 --> 00:11:03,428
‫así que deleteOne y luego el usuario.

195
00:11:06,220 --> 00:11:09,140
‫Ahora, solo el administrador debería poder eliminar

196
00:11:09,140 --> 00:11:12,760
‫usuarios más adelante porque recuerde que cuando el usuario

197
00:11:12,760 --> 00:11:14,750
‫se elimina a sí

198
00:11:14,750 --> 00:11:17,750
‫mismo, en realidad no se eliminarán, sino que

199
00:11:17,750 --> 00:11:20,350
‫solo los activos se establecerán en falso.

200
00:11:20,350 --> 00:11:22,400
‫Pero el administrador, por otro lado,

201
00:11:22,400 --> 00:11:25,710
‫realmente podrá eliminar al usuario de manera efectiva de la

202
00:11:25,710 --> 00:11:26,940
‫base de datos.

203
00:11:26,940 --> 00:11:28,550
‫Pero, de nuevo, nos vamos a

204
00:11:28,550 --> 00:11:31,023
‫preocupar por el tema de los permisos un poco más tarde.

205
00:11:31,980 --> 00:11:35,487
‫Por ahora, verifiquemos en userRoutes si la ruta

206
00:11:37,057 --> 00:11:39,210
‫está realmente implementada,

207
00:11:39,210 --> 00:11:41,560
‫y sí, está aquí abajo.

208
00:11:41,560 --> 00:11:43,730
‫Y como ahora implementamos

209
00:11:43,730 --> 00:11:47,653
‫esto, también probémoslo aquí nuevamente también en Postman.

210
00:11:49,290 --> 00:11:50,983
‫Así que primero salvemos este.

211
00:11:54,440 --> 00:11:55,360
‫Entonces...

212
00:11:56,210 --> 00:11:59,373
‫elimine la revisión,

213
00:12:02,000 --> 00:12:07,000
‫y ahora simplemente copiemos esto en

214
00:12:08,420 --> 00:12:10,910
‫otra ruta.

215
00:12:10,910 --> 00:12:13,063
‫Así que elimine y luego un usuario,

216
00:12:14,340 --> 00:12:16,690
‫pero en realidad no lo voy a hacer ahora.

217
00:12:17,970 --> 00:12:22,253
‫Todo lo que quiero es obtener una identificación aleatoria.

218
00:12:23,350 --> 00:12:26,703
‫O en realidad, simplemente creemos un nuevo usuario,

219
00:12:27,780 --> 00:12:31,323
‫así que básicamente regístrese y luego elimine ese de inmediato.

220
00:12:32,500 --> 00:12:35,563
‫Así que hola, así.

221
00:12:38,690 --> 00:12:43,360
‫Obtenga todos los usuarios, y luego está este tipo aquí.

222
00:12:43,360 --> 00:12:46,963
‫Y entonces eliminémoslo de inmediato, entonces

223
00:12:48,310 --> 00:12:51,560
‫enviamos, obtenemos 204 sin contenido.

224
00:12:51,560 --> 00:12:53,833
‫Y, por supuesto, ahora debería irse.

225
00:12:54,840 --> 00:12:56,740
‫Ahora, si intentamos volver a

226
00:12:56,740 --> 00:12:58,680
‫verla, básicamente tratando de eliminar un

227
00:12:58,680 --> 00:13:01,320
‫usuario que ya no está, deberíamos obtener un error.

228
00:13:01,320 --> 00:13:04,673
‫Así que echemos un vistazo, y de hecho no se encontró

229
00:13:04,673 --> 00:13:06,330
‫ningún documento con esa identificación.

230
00:13:06,330 --> 00:13:09,203
‫Y esto significa que en nuestra

231
00:13:10,570 --> 00:13:15,550
‫función de fábrica, aquí mismo, todo esto, AppError y catchAsync, todo

232
00:13:15,550 --> 00:13:17,240
‫eso sigue intacto.

233
00:13:17,240 --> 00:13:20,490
‫Así que todo sigue funcionando igual que antes.

234
00:13:20,490 --> 00:13:23,283
‫Ahora, eso también fue importante para probar aquí.

235
00:13:25,670 --> 00:13:27,860
‫Guardemos esto rápidamente aquí también, de

236
00:13:27,860 --> 00:13:31,660
‫modo que todos y cada uno de los puntos finales

237
00:13:31,660 --> 00:13:33,810
‫que estamos implementando, también

238
00:13:33,810 --> 00:13:36,890
‫los agregaré aquí en Postman porque un poco

239
00:13:36,890 --> 00:13:39,420
‫más tarde podremos crear realmente documentación de

240
00:13:39,420 --> 00:13:43,970
‫API basada en todos los esto que hemos guardado aquí en Postman.

241
00:13:43,970 --> 00:13:47,713
‫Esa es otra característica útil de esta aplicación.

242
00:13:50,253 --> 00:13:51,960
‫Así que hemos eliminado el

243
00:13:51,960 --> 00:13:54,520
‫usuario actual, y nuevamente eso es diferente de simplemente

244
00:13:54,520 --> 00:13:56,800
‫eliminar el usuario porque este aquí es para

245
00:13:56,800 --> 00:13:59,803
‫administración y este es para el usuario que está conectado

246
00:14:00,820 --> 00:14:01,963
‫actualmente, muy diferente.

247
00:14:03,320 --> 00:14:06,750
‫De acuerdo, esta fue nuestra primera función de fábrica solo

248
00:14:06,750 --> 00:14:09,660
‫para eliminar y solo para que usted comprenda

249
00:14:09,660 --> 00:14:11,290
‫el concepto en sí.

250
00:14:11,290 --> 00:14:13,740
‫A continuación, implementaremos funciones de

251
00:14:13,740 --> 00:14:16,293
‫fábrica para actualizar y crear documentos.

