‫Instructor: Muy bien, y ahora solo para
‫terminar esta parte, creemos algunas fábricas para obtener documentos.
‫Y comencemos con getOne aquí, ¿de acuerdo?
‫Exportaciones. getOne, pero este es un poco más complicado,
‫y eso se debe a que tenemos
‫un populate en el controlador getTour.
‫Entonces, echemos un vistazo a eso.
‫Entonces, aquí mismo, en este, tenemos este poblado aquí, que es
‫diferente de todos los demás controladores
‫de get en los otros recursos, ¿verdad?
‫Pero, bueno, esto no
‫es realmente un problema porque simplemente nos
‫permitiremos pasar un objeto populate options a nuestra función getOne, ¿de acuerdo?
‫Entonces, en lugar de simplemente
‫pasar el modelo, también tendremos populate, entonces opciones, está bien.
‫Y así, a partir de aquí, devolveremos la
‫función de controlador normal.
‫Entonces, sigamos adelante y copiemos de nuevo todo esto,
‫está bien.
‫Entonces, no necesitamos este aquí.
‫Entonces aquí, como siempre,
‫es modelo, y aquí está doc.
‫Bueno, en realidad aquí, documento,
‫y aquí, una vez más, datos iguales a doc.
‫Ahora, también necesitamos hacer algunos cambios
‫aquí debido a este poblado, así
‫que básicamente, primero crearemos la consulta, y luego,
‫si existe el objeto de opciones poblar, luego lo
‫agregaremos a la
‫consulta, y luego por el final, espera esa consulta, ¿de acuerdo?
‫¿Tener sentido?
‫Entonces, traduzcamos lo que acabo de decir.
‫Entonces, la consulta es simplemente igual a Model. findById, así,
‫¿verdad?
‫Entonces, si hay un objeto de opciones rellenar,
‫bueno,
‫entonces, en ese
‫caso, la consulta será consulta. rellenar con las opciones de rellenar, ¿de acuerdo?
‫Y luego, finalmente esperamos nuestra consulta y la
‫guardamos en el documento.
‫Entonces, espere una consulta como esta, de acuerdo.
‫Y entonces, eso es todo.
‫Entonces, esta lógica que
‫tenemos aquí no espera la consulta de inmediato, sino
‫que simplemente la guarda en una
‫variable, para que podamos, en el siguiente paso, manipularla.
‫De hecho, ya hicimos este tipo de
‫cosas antes cuando estábamos construyendo nuestras funciones de API, ¿verdad?
‫Entonces, solo al final, cuando toda la consulta esté lista,
‫la esperaremos y la almacenaremos en algún lugar de una variable.
‫Ahora, sigamos adelante y usemos este en todas partes, comenzando,
‫por supuesto, con el Tour.
‫Entonces, getTour ahora será
‫de fábrica. getOne,
‫y pase el Tour y
‫rellene el objeto de opciones, ¿lo recuerda?
‫Entonces, lo que vamos a hacer es decir ruta y reseñas.
‫Bien, recuerde que la propiedad de la ruta es
‫básicamente el campo
‫que queremos llenar, y luego también podemos
‫especificar select, así que recuerde este,
‫donde especificamos cuál de los campos queremos obtener, ¿verdad?
‫Pero en
‫este caso, no tenemos nada
‫de eso, así que dejémoslo así.
‫Y ahora, podemos continuar y eliminar todo esto.
‫Que bien.
‫Y, solo para asegurarnos, probemos esto rápidamente.
‫Entonces, obtendremos un determinado Tour y,
‫de hecho, todavía funciona.
‫Veamos si este tiene algunas críticas.
‫Oh, sí, de hecho lo hace,
‫y ves que el proceso de población también sigue funcionando.
‫Entonces, eso fue exitoso, diría yo.
‫Y entonces, ahora usemos también este getOne en
‫todos los demás recursos.
‫Entonces, el controlador de usuario aquí donde tenemos, veamos
‫dónde está, ah, aquí abajo.
‫Entonces, digamos fábrica. getOne, pero solo
‫con el modelo de usuario y sin objeto
‫de opciones de relleno.
‫De acuerdo, y ya que
‫estamos aquí, cambiemos el mensaje de error aquí para
‫crear usuario, de
‫modo que esta ruta no esté definida, nunca lo estará,
‫y use el registro en su lugar.
‫A continuación, y
‫finalmente, lo mismo para las revisiones básicamente.
‫Entonces, exportaciones. getReview es
‫igual de fábrica. getOne review,
‫y creo que aún no tenemos (murmura) nuestras rutas.
‫Y, de hecho, no lo hacemos, así que agregando esto muy
‫rápido aquí, reviewController. getReview, ¿de acuerdo?
‫Probemos rápidamente este también, solo
‫porque también quiero agregarlo aquí a
‫Postman, ¿de acuerdo?
‫Entonces, simplemente copiando este porque es similar, y luego,
‫de hecho, es get.
‫Y, sí, funciona perfectamente bien, guárdelo aquí en reseñas
‫y obtengaReview.
‫Muy bien, ahora todo
‫lo que falta es básicamente una función de fábrica getAll, ¿verdad?
‫Entonces, básicamente,
‫para reemplazar este getAllTours, getAllUsers, que también deberíamos
‫tener en algún lugar aquí, así que getAllUsers y
‫también getAllReviews, así que copiemos nuevamente aquí desde el
‫controlador Tour porque en realidad este es
‫el que está realmente completo porque
‫tiene todo estas características de la API y, por
‫lo tanto, después de crear nuestra función de fábrica
‫getAll, los tres recursos obtendrán estas características de la API.
‫De nuevo, copiando todo esto,
‫exporta. getAll,
‫por lo que ahora, en realidad tendremos que
‫requerir estas características
‫de API aquí, y de hecho podemos eliminarlo de
‫aquí porque ya no lo
‫necesitaremos porque ahora lo transferimos a la fábrica de controladores, ¿verdad?
‫Ahora, aquí todo lo que tenemos que hacer es reemplazar,
‫como siempre, con el modelo, y luego aquí,
‫el documento y los datos.
‫Ahora bien, perfecto.
‫Entonces, veamos
‫si esto funciona, getAll con Tour.
‫Y ahora, realmente quiero ver si esto
‫todavía funciona con todas estas características,
‫por lo que está aquí, getAll Tours,
‫y entonces, agreguemos nuestra
‫cadena de consulta aquí, y digamos una duración mayor o
‫igual que digamos un 10, y ordenamos por precio.
‫Bien, obtenemos dos resultados aquí.
‫Está bien, no está funcionando.
‫De todos modos, aquí obtenemos los dos resultados (risas), y
‫ambos tienen una duración superior a 10,
‫y el precio es 1497,
‫y el segundo es más alto, ¿de acuerdo?
‫Pongámoslo aquí como siete, para que obtengamos
‫un poco más de resultados.
‫Bien, y ahora tenemos cinco.
‫Bien, de todos modos, ahora hagamos lo mismo con las revisiones
‫porque estoy muy emocionado de probar estas funciones de API
‫en las revisiones también.
‫Ahora, un problema que tenemos aquí
‫es que este controlador de ruta en realidad tiene estas dos
‫líneas de código que todos los demás controladores getAll no tienen, ¿de acuerdo?
‫Pero, lo que vamos a hacer aquí es simplemente copiar este
‫código en nuestra fábrica de controladores también, ¿de acuerdo?
‫Eso es una
‫especie de truco porque realmente solo necesitamos este para obtener
‫todas las revisiones, pero solucionar esto sería demasiado
‫trabajo aquí en esta situación, y una vez más,
‫simplemente quiero mantenerlo simple aquí, de acuerdo.
‫Entonces, copiemos
‫esto aquí, y estoy agregando un comentario aquí
‫para permitir getReviews anidados en el Tour, ¿de acuerdo?
‫Entonces, este filtro, también lo pasaremos aquí, ¿de acuerdo?
‫De nuevo, este es un
‫pequeño truco, pero lo
‫dejaré aquí así porque creo que es razonable, de acuerdo.
‫De todos modos, ahora deshagámonos de esto,
‫así que fábrica. getAll y revisar, ¿de acuerdo?
‫Dejemos esto aquí junto a todos los demás.
‫Y ahora,
‫como puede ver, en realidad ya ni siquiera necesitamos este catchAsync aquí,
‫así que lo comentaré aquí
‫porque, quién sabe, tal vez en el futuro lo
‫necesitemos para alguna otra función de Middleware aquí, todos Derecha.
‫Entonces, se ve bien
‫y limpio, y ahora probemos las revisiones de getAll.
‫Muy bien, guardemos los cambios aquí también.
‫Estos no los necesitamos,
‫pero en realidad quiero obtener todos los comentarios.
‫Entonces, en este momento tenemos
‫cuatro reseñas, por lo que ahora intentemos
‫filtrar las reseñas solo con una calificación de cuatro, digamos.
‫Entonces, cadena de consulta, calificación igual a cuatro.
‫Ah, y realmente funciona,
‫muy bien, eso es realmente bueno.
‫Entonces, así, obtenemos acceso a todas estas funciones de
‫API como filtrado, clasificación, paginación y todas esas cosas buenas que implementamos
‫(risas) hace mucho tiempo en
‫el curso, ¿verdad?
‫Y también quiero
‫asegurarme de que este getAll reviews on Tour también funcione.
‫Entonces, revisemos eso,
‫y sí, verá que realmente lo hace.
‫Entonces, la identificación del Tour
‫que tenemos aquí es exactamente la que está aquí y aquí.
‫Entonces, ese también sigue
‫funcionando, por lo que finalmente también
‫usemos getAll para el controlador de usuario, de acuerdo.
‫Entonces, básicamente reemplazando simplemente esto,
‫así de fábrica. getAll user, de acuerdo.
‫Y, de hecho,
‫pongamos este aquí cerca de los demás, de acuerdo.
‫Y luego este también, así que
‫básicamente tener todos estos generados por las funciones
‫de fábrica juntos, y
‫luego todos los demás simplemente por encima de ellos.
‫Muy bien, hagamos lo mismo aquí, este ya
‫es agradable y limpio, y
‫lo mismo para el controlador Tour, entonces, ¿qué
‫más tenemos aquí?
‫Podemos deshacernos de éste
‫y, está bien, creo que se ve bien así.
‫Nuevamente, podemos comentar este fragmento de código
‫porque, al menos por ahora, ya no lo necesitamos.
‫Entonces, solo para probarlo nuevamente aquí con los usuarios,
‫reunámoslos a todos,
‫y, de hecho, aquí están.
‫Ahora también podemos decir que
‫solo queremos los que tienen el rol
‫de usuario y, de hecho, eso también funciona.
‫Genial, y eso realmente concluye esta parte de la
‫creación de funciones de fábrica de
‫controladores, y esto realmente fue un gran paso adelante en
‫nuestro proyecto, así
‫que recuerde que, un poco más tarde,
‫también crearemos un recurso de reserva, y entonces
‫verá que probablemente Podrás crear la API principal
‫para estas reservas en cinco
‫segundos o algo así, simplemente usando estas cinco funciones de fábrica, de acuerdo.
‫De todos modos, buen trabajo, gran trabajo, y
‫nos vemos en el próximo.