‫Instructor: En
‫este video, continuaremos implementando el recurso de revisión y
‫esta vez implementando un punto final
‫para obtener todas las revisiones y también para crear nuevas revisiones.
‫Y entonces, en este punto, básicamente estamos revisando cosas
‫que ya aprendimos antes en secciones anteriores.
‫Entonces, en este video, tengo otro desafío para ti.
‫Básicamente, quiero que implemente ambos puntos finales, de modo que un
‫punto final para obtener todas
‫las revisiones y un punto final para crear nuevas revisiones por su cuenta.
‫¿Okey?
‫Así que cree el
‫archivo del controlador, luego cree las funciones del
‫controlador y luego también cree las rutas en su archivo de rutas de revisión.
‫Y luego, al final del curso, cree algunas revisiones nuevas
‫y también recupérelas de la base de datos
‫utilizando obtener todas las revisiones.
‫Está bien.
‫Así que pausa el video ahora y ponte manos a la obra.
‫Está bien.
‫Y ahora es mi turno de implementar esto, y
‫estoy comenzando con las funciones del controlador.
‫Así que aquí
‫creamos el controlador de revisión
‫dot js y, por supuesto, comenzamos solicitando la revisión.
‫Así que un nivel arriba, luego modelos, luego revise el modelo.
‫Así que obtén Todas las reseñas y usaremos
‫el mismo nombre de siempre.
‫¿Derecha?
‫Entonces ya sabemos que
‫esto será una función asíncrona porque vamos a
‫tratar con
‫la base de datos aquí, y también necesitamos envolver toda
‫esta función en el catch Async.
‫Así que coge Async, creo que así se llama.
‫Exigir.
‫Está bien.
‫Y ahora simplemente busquemos todas las reseñas usando await,
‫y luego simplemente busquemos sin ningún filtro.
‫Un estado de 200 y luego se envía de vuelta a JSON normal.
‫Estado como éxito.
‫También definimos la propiedad del
‫resultado con la longitud de los puntos de las
‫revisiones y, por supuesto, los datos en sí.
‫Dale un guardado aquí y ahora en el siguiente.
‫Así que crea Revisión.
‫Está bien.
‫Y empiezas a ver aquí
‫que, en realidad, estamos creando una gran cantidad de código duplicado.
‫Así que todo esto aquí se
‫ve básicamente exactamente igual que para los usuarios y
‫para los recorridos.
‫¿Derecha?
‫Y de hecho vamos a solucionar
‫esto un poco más adelante en la sección.
‫Pero por ahora, realmente solo quiero que esto funcione.
‫¿Okey?
‫Entonces, por ahora, no se preocupe por escribir todo
‫este código que parece duplicado.
‫Bueno.
‫Así que llamamos a esto aquí
‫nueva Revisión, y luego, como siempre, usamos dot create con todos los
‫datos que provienen del cuerpo.
‫¿Okey?
‫Y así, nuevamente, si hay campos en el cuerpo
‫que no están en
‫el esquema de revisión, simplemente se ignorarán.
‫Y por eso
‫es seguro hacerlo así
‫al crear un nuevo recurso.
‫¿Está bien?
‫De todos modos, devolvémoslo ahora al cliente como siempre.
‫Entonces, con un estado de 201
‫para creado, y revisión debería ser la
‫nueva Revisión.
‫Está bien.
‫En realidad, sin los dos puntos, punto y coma, y así es.
‫Todos estos son controladores.
‫Ahora pasemos a la ruta.
‫Así que
‫revise Routes dot js.
‫Y aquí,
‫por supuesto, comenzamos solicitando nuestro controlador,
‫y a los controladores y
‫revisamos Controller dot js.
‫A continuación, necesitamos crear nuestro enrutador.
‫Entonces express, y por supuesto también necesitamos
‫importar express aquí.
‫Así que hagámoslo antes de hacer cualquier otra cosa.
‫Rápido.
‫Entonces dot Router, y creo que así es como funciona.
‫Y ahora
‫enrutador y definir nuestra
‫ruta y esta es básicamente la ruta de las revisiones.
‫Bueno.
‫Porque recuerde cómo en el
‫siguiente paso vamos a
‫montar este enrutador en las revisiones de barras de API.
‫¿Okey?
‫Así como hicimos con los recorridos y los usuarios.
‫Y de hecho, hagámoslo antes de hacer cualquier otra cosa.
‫¿Okey?
‫Así que solo para quitar esa
‫confusión que pueda tener.
‫Entonces, exportemos el enrutador desde aquí.
‫¿Okey?
‫Y ahora podemos pasar a la
‫aplicación dot js.
‫Y luego, por supuesto, importe nuestro enrutador aquí.
‫Y
‫requiera, revise las rutas.
‫¿Okey?
‫Y ahora venimos aquí
‫y montamos este enrutador en una nueva ruta.
‫Y ese camino va a ser
‫como dije API slash V1 slash
‫reviews.
‫Bueno.
‫Y nuevamente, este enrutador
‫aquí que estamos especificando ahora es básicamente un
‫middleware que montamos en esta ruta.
‫¿Okey?
‫Entonces, siempre que haya una
‫solicitud con una URL que comience así, básicamente
‫se llamará a esta función
‫de middleware aquí.
‫Y ese es entonces
‫nuestro enrutador y allí solo la
‫ruta de barra, por lo que solo
‫la raíz será básicamente las revisiones de la API V1.
‫¿Okey?
‫Así como lo hicimos antes con los otros dos recursos.
‫Así que Tour Model, ahí no es donde estábamos trabajando.
‫Estuvimos trabajando en la revisión de Rutas.
‫Bueno.
‫Entonces especificamos una ruta.
‫Especifiquemos ahora el método para el
‫que especificamos nuestra función.
‫Así que tenemos get, y para
‫eso usamos o
‫reescribimos la revisión Controller dot get Todas las revisiones,
‫¿verdad?
‫Y luego también tenemos una publicación
‫para crear Revisión.
‫¿Okey?
‫Dale una oportunidad.
‫Y, de hecho, solo queremos que los
‫usuarios autenticados puedan publicar reseñas.
‫Y también solo los usuarios que en realidad son usuarios habituales.
‫Así que ni administradores ni guías turísticos.
‫¿Okey?
‫Entonces, ¿cómo podemos implementar eso?
‫Recordemos nuestra sección de autenticación.
‫Entonces comenzamos por requerir nuestro auth Controller.
‫Así que de nuevo, controladores y auth Controller.
‫Y ahora todo lo
‫que tenemos que hacer es usar las
‫funciones de middleware que especificamos allí.
‫Recordar.
‫Entonces, primero, usamos el middleware protect, entonces auth Controller dot
‫protect y esto
‫hará
‫que protejamos esta ruta para que
‫solo accedan los usuarios que están autenticados.
‫¿Derecha?
‫Y luego, en
‫el siguiente paso, decimos que queremos restringir
‫esta ruta, por lo que usamos nuestro middleware Restringir
‫a solo a los usuarios con el rol de usuario.
‫¿Está bien?
‫De nuevo, hicimos esto aquí antes un par de veces.
‫Y entonces, no hay nada nuevo en este momento.
‫Bueno.
‫Entonces creo que seguimos todos los pasos.
‫Entonces, en primer lugar, tenemos un modelo que nos
‫permitirá crear nuevos documentos.
‫Luego, tenemos nuestras funciones de controlador
‫definidas en nuestro controlador para obtener todas las
‫revisiones y crear revisiones.
‫Luego, usamos estas funciones de controlador o
‫funciones de
‫controlador, como también puede
‫llamarlas, para crear algunas rutas nuevas.
‫¿Okey?
‫Así que creamos una ruta para obtener
‫reseñas y publicar reseñas.
‫Y al igual que
‫antes, hicimos esto básicamente en una mini subaplicación
‫que es solo para reseñas.
‫Y por eso creamos nuestro nuevo
‫enrutador que luego importamos a nuestra aplicación principal
‫y lo montamos en esta url donde queremos acceder
‫a todo lo relacionado con las revisiones.
‫¿Está bien?
‫Entonces, ahora vayamos a probar esto.
‫Así que seguiré adelante,
‫copiaré esto y crearé una nueva pestaña aquí
‫y aquí
‫están las reseñas
‫y, por supuesto, la publicación.
‫Está bien.
‫Entonces, ¿qué necesitamos especificar realmente para
‫publicar una nueva reseña?
‫Entonces necesitamos la revisión en sí.
‫Recordar.
‫Así que digamos "recorrido increíble",
‫luego la calificación y
‫le daré cinco aquí, y
‫luego el recorrido y la identificación de usuario.
‫¿Okey?
‫Y ahora necesitamos obtener la identificación de uno de los recorridos.
‫¿Okey?
‫Entonces, usemos el primer recorrido
‫real aquí, digamos, usemos este explorador marino.
‫¿Está bien?
‫Entonces,
‫la identificación del explorador marino
‫y ahora, por supuesto, también
‫necesitamos la identificación del usuario que publica la reseña.
‫Y podemos obtener
‫eso aquí obteniendo todos los usuarios.
‫Entonces, en realidad, solo tenemos un usuario
‫que es un usuario regular.
‫Así que este Jonas aquí y vamos a conseguir esta identificación.
‫¿Está bien?
‫Ahora tenga en cuenta que
‫este usuario realmente necesita iniciar sesión.
‫¿Okey?
‫Y así, un poco más
‫tarde, obtendremos automáticamente la ID de usuario del usuario
‫que ya inició sesión.
‫Recuerde que podemos hacer eso porque el middleware de protección
‫colocará al usuario en el objeto de solicitud.
‫¿Recuérdalo?
‫Pero por ahora, quería mantenerlo simple aquí,
‫por lo que con
‫la implementación actual también necesitamos proporcionar la ID del usuario.
‫¿Okey?
‫Pero aún tenemos que iniciar sesión como un
‫usuario regular porque protegemos esta ruta.
‫¿Recuérdalo?
‫Así que cerremos un par de estos.
‫¿Okey?
‫E inicie sesión aquí.
‫Y lo hacemos como, entonces, qué hola, Jonas en IO, así
‫que hola.
‫Y su contraseña es probablemente y espero que siga
‫siendo la misma.
‫Y en realidad no es así, intentemos una nueva contraseña
‫porque recuerdo que usé esa cuando cambiamos las contraseñas.
‫Todavía no funciona, así que creemos
‫un nuevo usuario.
‫¿Okey?
‫Por supuesto que podríamos restablecer la contraseña en este punto, pero
‫eso es demasiado trabajo,
‫así que simplemente voy a crear un
‫nuevo usuario para que sea más fácil probarlo ahora.
‫¿Okey?
‫Así que usemos la prueba en Jonas dot IO
‫y el nombre aquí será usuario de prueba.
‫Está bien.
‫Ah, y ya tenemos esa dirección de correo electrónico en nuestra base de datos y
‫eso es extraño.
‫Tenemos usuario.
‫Quizás no fue así, no lo actualizamos correctamente.
‫Oh, pero tal vez sea un usuario eliminado.
‫Entonces, un usuario que ya no está activo
‫y, por lo tanto, no aparece aquí.
‫Así que echemos un vistazo a eso en la brújula.
‫Y, por supuesto, cuando esté en
‫modo de desarrollo, se encontrará con este tipo de problemas todo el tiempo.
‫Así que aquí, prueba a Jonas, y como estaba diciendo,
‫en realidad es uno de estos usuarios eliminados.
‫Tan activo establecido en falso.
‫Intentémoslo de nuevo.
‫Así que prueba al usuario aquí simplemente también.
‫Así que envíalo ahora y ahora estamos conectados.
‫Y ahora estoy copiando la identificación de este nuevo usuario para
‫crear esta nueva revisión.
‫¿Está bien?
‫Enviémoslo ahora y,
‫por supuesto, obtenemos el error de que no ha
‫iniciado sesión porque en realidad
‫no proporcionamos nuestro token web JSON.
‫Entonces tenemos que llegar a la autorización, luego al
‫token de portador, y luego, por
‫supuesto, a este.
‫Entonces, si intentamos esto ahora
‫de nuevo, aquí vamos.
‫Bueno.
‫Creemos otro para otro recorrido, esta
‫vez para, para
‫el
‫próximo, así que para Forrest Hiker.
‫Así que copie la identificación aquí también.
‫Sí.
‫Aquí el usuario va a ser el mismo, pero otro recorrido.
‫Démosle cuatro estrellas.
‫Y digamos simplemente "me encantó". "Algo
‫muy simple y bien.
‫Guarde esto y crearé
‫una nueva carpeta aquí para
‫las revisiones y, por supuesto,
‫algo
‫salió mal aquí.
‫Entonces, ¿dónde está esa carpeta?
‫Mmm.
‫Realmente no está en ninguna parte, así que creémoslo aquí.
‫Y también podemos cambiar el nombre aquí.
‫Así que
‫crea una nueva reseña.
‫Bueno.
‫Y ahora también queremos recibir todas las reseñas.
‫Entonces ya no necesitamos estos dos.
‫De acuerdo, este es realmente
‫un GET, y también guardémoslo en Reseñas.
‫Obtenga todas las reseñas.
‫Y eso debería ser suficiente para comenzar y
‫ver realmente todas nuestras reseñas.
‫Está bien, y aquí vamos.
‫Echemos un vistazo a la brújula, y
‫para ver las revisiones aquí, debemos continuar
‫y recargar toda la base
‫de datos, pero ahora, cuando llegamos a Revisiones aquí, de
‫hecho vemos nuestras dos revisiones que también se han creado.
‫Bueno.
‫Ahora, ¿cómo lo hacemos para
‫que realmente veamos al usuario y los datos del
‫recorrido aquí en lugar de simplemente los ID?
‫Bueno, por supuesto que necesitamos volver a utilizar populate.
‫¿Derecha?
‫Y eso es exactamente lo que haremos
‫en el siguiente video.