‫Jonas: Sigamos creando algunas funciones de fábrica,
‫esta vez para actualizar y crear algunos recursos.
‫Entonces, ahora que ya sabemos cómo funciona,
‫es realmente sencillo seguir haciendo lo mismo para
‫la actualización.
‫Entonces exporta. updateOne, y
‫de hecho sigamos adelante y copiemos el código nuevamente desde
‫el controlador de recorrido.
‫Bueno.
‫Y ahora tenemos un montón de
‫archivos abiertos porque en realidad los estamos cambiando
‫todos al mismo tiempo.
‫Copiemos esto y peguemos
‫aquí.
‫Entonces, lo que nos interesa es, nuevamente, esta parte.
‫Bueno.
‫Y ahora, por supuesto, necesitamos crear esa función de fábrica
‫porque no queremos devolver esto.
‫En su lugar, queremos devolver
‫una función que, a su vez, devolverá esto.
‫¿Derecha?
‫Entonces eso es muy simple.
‫Usamos una función de flecha simple en la que pasamos
‫el modelo y luego devolvemos implícitamente lo que venga después de la flecha.
‫Entonces, todo esto.
‫Está bien.
‫Así que, al igual que antes, reemplacemos el
‫modelo específico por
‫uno general, y luego reemplacemos todo esto aquí con document.
‫O en realidad, con doc, como lo hicimos antes.
‫Y aquí no hay
‫ningún documento, y luego aquí abajo, donde realmente enviamos
‫los datos, sería bueno darle el nombre de propiedad de
‫los datos que estamos enviando.
‫Por ejemplo, reseñas y luego el documento o recorridos.
‫Bueno.
‫Pero eso es demasiado trabajo para implementarlo ahora.
‫Entonces, simplemente lo dejaré así donde
‫envié, nuevamente, datos.
‫Está bien.
‫Así fueron nuestros datos
‫aquí, y luego el sobre allí, nuevamente,
‫se llamará datos.
‫Está bien.
‫Entonces, esto debería funcionar
‫ahora porque todo lo demás es realmente igual.
‫Entonces, podemos seguir adelante, deshacernos de todo esto
‫y simplemente decir
‫fábrica. updateOne, pase
‫el modelo Tour y termine el día.
‫¿Está bien?
‫Entonces, realmente simple.
‫A continuación, lo mismo para los usuarios.
‫Entonces, nuevamente, tenemos updateUser.
‫Esta ruta aún no está implementada.
‫Entonces, simplemente reemplacemos todo esto aquí con nuestra
‫función de fábrica updateOne.
‫Está bien.
‫Y así, como antes, esta función updateUser es
‫solo para administradores, ¿de acuerdo?
‫Y solo para actualizar los datos que no
‫son la contraseña, porque recuerde, cada vez que usamos, dónde está eso, así
‫que cada vez que usamos findById y actualizamos, no
‫se ejecuta todo el middleware seguro.
‫Así que recuerda cómo hablamos de eso un par de veces.
‫Y entonces, nuevamente,
‫es realmente importante que no intentemos cambiar las contraseñas
‫aquí usando este updateUser.
‫¿Okey?
‫De hecho, escribamos eso aquí.
‫Con este.
‫Excelente.
‫Y ahora, finalmente, también,
‫pongámoslo en el controlador de revisión.
‫Está bien.
‫Entonces exporta. updateReview
‫y luego nuestra Revisión.
‫Entonces ese es muy simple.
‫Ahora sigamos adelante y agreguemos estas rutas a Postman también.
‫Así que
‫tenemos Eliminar revisión, y ahora simplemente agreguemos aquí como PATCH.
‫Y lo que también necesitamos para implementar la ruta en
‫el enrutador de revisión.
‫Así que hagámoslo también.
‫Pero primero, lo guardaré aquí en reseñas.
‫Así que Actualizar Revisión.
‫Entonces, aquí, en las rutas de revisión, debemos
‫agregar el método de parche y luego
‫revisarController. updateReview.
‫Está bien.
‫Entonces, echemos un vistazo a una de
‫estas revisiones aquí, digamos esta, y actualicemos la calificación a cuatro.
‫Bueno.
‫Así que el
‫cuerpo, ajústelo a cuatro.
‫Y envíalo ahora.
‫De acuerdo, y como podemos ver, recuperamos nuestra nueva revisión con
‫la calificación actualizada, tal como se esperaba.
‫Y nuevamente, nos ocuparemos de la autorización un poco más
‫adelante en la sección.
‫Por ahora, solo quería que esto funcionara.
‫Entonces, usuarios, ahora también actualice a los usuarios.
‫¿Okey?
‫Así que OBTENGA y PARCHE.
‫Así que consigamos a todos los usuarios aquí.
‫Digamos éste.
‫Y cambiemos el
‫nombre
‫a Administrador, que antes era simplemente admin.
‫¿Está bien?
‫Y entonces, este también funcionó.
‫De acuerdo, de nuevo, estoy guardando todo esto aquí en mi colección porque luego,
‫un poco más tarde,
‫puedo seguir adelante y crear documentación a partir
‫de todos los datos de esta colección que tenemos aquí.
‫Así que Update
‫User, pon ese aquí y este aquí.
‫Perfecto.
‫Por lo tanto, la actualización de usuarios ahora
‫funciona para los tres recursos que utilizan la función de fábrica.
‫Y entonces, sigamos adelante y agreguemos el
‫siguiente, que será createOne.
‫Así que exporta, createOne.
‫Y nuevamente, pasamos el modelo.
‫Y a partir de ahí, creamos una nueva función.
‫Y eso puede, una
‫vez más, copiarlo del Tour aquí.
‫Está bien.
‫Entonces, lo que necesitamos aquí es solo esta parte.
‫Así que modele y documente.
‫Y aquí abajo, nuevamente lo llamamos datos.
‫Está bien.
‫Y entonces, eso es todo.
‫Esa es nuestra función de fábrica.
‫Y entonces, nuevamente, vengamos aquí y reemplácelo.
‫Entonces fábrica. createOne, Tour.
‫Entonces ves que nuestro código en los
‫controladores ahora se está volviendo realmente limpio, ¿verdad?
‫Pero en realidad, no vamos a poder reemplazar
‫todas las funciones que tenemos aquí con fábricas, porque de lo
‫contrario, ni siquiera necesitaríamos este
‫archivo de controlador, ¿verdad?
‫Entonces podríamos simplemente crear estos controladores sobre la marcha, básicamente,
‫en el archivo del enrutador, ¿verdad?
‫Y así, básicamente podríamos omitir todo este
‫paso del archivo del controlador.
‫Pero nuevamente, todavía lo
‫necesitamos porque tenemos algunas otras cosas allí.
‫Por ejemplo, estos métodos aquí para
‫obtener las estadísticas del recorrido, o este plan
‫mensual, y sí.
‫Así que tiene sentido conservar este archivo, ¿de acuerdo?
‫Entonces, a continuación,
‫para los usuarios, en realidad no necesitamos createOne
‫porque, para crear nuevos
‫usuarios, ya tenemos la función de
‫registro, y realmente no podemos reemplazarla con
‫una fábrica porque realmente es diferente de esta genérica.
‫¿Okey?
‫Pero podemos hacerlo en el controlador de revisión, ¿de acuerdo?
‫Básicamente, queremos reemplazar este createReview.
‫Ahora ves que también,
‫en este, tenemos algún paso adicional.
‫Entonces tenemos este código que
‫tampoco está en nuestra función createOne genérica.
‫Entonces, ¿cómo podemos arreglar eso?
‫Bueno, en realidad podemos crear un
‫middleware que se ejecutará antes de createReview, ¿de acuerdo?
‫Y entonces, eso en realidad también lo hace un poco más desacoplado.
‫Entonces, básicamente, este código aquí tendrá su propia función
‫y estará
‫realmente desacoplado de createReview, porque en realidad
‫no tiene mucho que ver con
‫la creación de la revisión.
‫Simplemente establece algunos datos, ¿verdad?
‫Entonces, llamemos realmente a este recorrido establecido y a los ID de usuario.
‫Así que pide, ah, falta la respuesta.
‫¿Okey?
‫Y todo lo que
‫vamos a hacer aquí es básicamente establecer estas ID en
‫el cuerpo y luego pasar directamente
‫al siguiente middleware, donde se crea la revisión.
‫¿Bien?
‫Entonces, antes de
‫que lo olvidemos, agreguemos este middleware.
‫Entonces, en las rutas de revisión, está aquí en la publicación.
‫Así que reviewController, setTourUserIds.
‫¿Okey?
‫Entonces, otra función de middleware en esta pila.
‫Bueno.
‫De todos modos, vamos a deshacernos de lo que tenemos
‫aquí porque es fácilmente
‫reemplazable con nuestra función de fábrica, una vez más.
‫Así que createOne, luego Review, y eso es todo.
‫Bueno.
‫Y solo para probar si esto
‫todavía funciona, simplemente sigamos adelante y creemos una nueva revisión en Tour.
‫¿Okey?
‫Y para eso, necesitamos las identificaciones del recorrido, así
‫que también digamos Obtener todos los recorridos.
‫Y ahora obtenemos que la pertenencia del usuario ya no existe, así que simplemente
‫sigamos adelante e inicie sesión nuevamente.
‫Así que consigue una nueva ficha aquí.
‫Y así, ahí vamos, como administrador.
‫Así que ahora, Get All Tours, aquí vamos.
‫Elijamos uno de ellos.
‫Así que digamos, The Forest Hiker.
‫Creo que este ya tiene algunas críticas, ¿no?
‫Oh no, no es así.
‫Así que este es bueno para probarlo ahora.
‫Y así, cree una nueva reseña en el recorrido.
‫Recuerde, tenemos que cambiar la identificación aquí.
‫Y ahora podemos publicar
‫esta revisión solo con la calificación y la revisión.
‫Pero creo que en
‫realidad no va a funcionar porque hemos iniciado sesión
‫como administrador y solo los usuarios habituales pueden publicar reseñas.
‫¿Okey?
‫Muy bien, sigamos haciendo esto aquí.
‫Alucinante.
‫Pero obtendremos este error que estaba diciendo.
‫Entonces no tienes permiso para realizar.
‫Entonces, necesitamos iniciar sesión
‫nuevamente, esta vez como un usuario diferente.
‫Y echemos un vistazo a cuál tenemos, en realidad.
‫Ah bien.
‫Así que usemos test.
‫O tal vez la prueba era la que tenía la contraseña incorrecta.
‫Pero veamos.
‫Ah sí.
‫Experimentemos con testuser.
‫Y este funciona.
‫Y entonces, en realidad, podemos continuar y eliminar
‫este otro porque olvidé su contraseña.
‫Bueno.
‫Y en este caso, no hay problema.
‫Simplemente podemos eliminar usuarios como queramos, ya que
‫solo estamos en desarrollo.
‫¿Okey?
‫Ahora deberíamos poder agregar esta revisión.
‫Y de hecho, aquí vamos.
‫Perfecto.
‫Así que concluye esta conferencia.
‫Todo lo que tenemos que
‫hacer en el siguiente es crear las
‫funciones de fábrica para obtener uno y obtener todos los documentos
‫de un determinado recurso.