- Cambiaremos nuestro sistema de persistencia a MongoDB
- Terminaremos de definir todos los endpoints para trabajar con los productos y carritos
- Profesioanlizar las consultas de productos con filtros, paginación y ordenamientos
- Profesionalizar la gestión de carritos usando los ultimos conceptos vistos
- Recuerda que lo unico que debes cambiar es el modelo de persistencia de archivos por el modelo basado en la base de datos. La logica de negocio sigue siendo la misma
-
Modificar el endpoint
GET /api/products
según las siguientes especificaciones:-
Debe poder recibir los siguientes parametros mediante el objeto
req.query
:- limit:
- Permite devolver el numero de elementos solicitados por el usuario.
- Sí no se recibe en la petición, tomará un valor por defecto de 10
- page:
- La pagina que queremos visualizar.
- Sí no se recibe, tendrá un valor por defecto de 1
- query:
- Representa el filtro a aplicar.
- Nos debe permitir filtrar productos por categoría y por disponibilidad (status).
- Sí este parametro no se recibe, se listarán todos los elementos
- sort:
- Se ordenarán los productos por precio, ya sea de forma ascendente o descendente.
- Sí no se recibe este parametro, no se aplica ordenamiento
- limit:
-
Debe retornar una respuesta con la siguiente estructura:
Propiedad Tipo de Dato Descripción status String
Representa el estado de la petición del usuario. Puede ser success
oerror
payload Array
Lista de productos totalPages Number
Cantidad total de paginas prevPages Number
Numero de la pagina anterior nextPage Number
Numero de la pagina siguiente page Number
Numero de pagina actual hasPrevPage Boolean
Boolean para saber sí existe una pagina anterior hasNextPage Boolean
Boolean para saber sí existe una pagina siguiente prevLink String
Link hacia la pagina anterior. Este será null sí la propiedad hasPrevPage
tiene un valor defalse
nextLink String
Link hacia la pagina siguiente. Este será null sí la propiedad hasNextPage
tiene un valor defalse
{ status: "success" payload: [ { "_id": "64305228441be760cfb1fecb", "first_name": "Sibby", "last_name": "David", "email": "sdavid5@goo.gl", "gender": "Female", "grade": 2.5, "group": "B" }, { "_id": "64305228441be760cfb1fecc", "first_name": "Erna", "last_name": "Vasyaev", "email": "evasyaev6@cbsnews.com", "gender": "Female", "grade": 4.6, "group": "B" }, { "_id": "64305228441be760cfb1fecd", "first_name": "Dev", "last_name": "Trevaskus", "email": "dtrevaskus7@yahoo.co.jp", "gender": "Male", "grade": 3.3, "group": "C" } ], totalPages: 20 prevPage: 1 nextPage: 3 page: 2 hasPrevPage: true hasNextPage: true prevLink: "/students?page=1" nextLink: "/students?page=3" }
-
-
Agregar
carts.router.js
los siguientes endpoints:Verbo http Ruta Descripcion DELETE /:cid/products/:pid
Elimina un producto del carrito especifico DELETE /:cid
Elimina todos los productos de un carrito PUT /:cid
Actualiza el carrito con un arreglo de productos PUT /:cid/products/:pid
Actualizar SOLAMENTE la cantidad de unidades de un producto que ya se encuentre en el carrito -
Modifica el
cartsSchema
para que en su propiedadproducts
almacene una referencia a la colección de productos -
Modifica el endpoint que permite encontrar un carrito
GET /api/carts/:cid
para que este pueda popular los objetos que hacen referencia a los productos almacenados dentro del carrito -
Modificar la vista
products.handlebars
para que incluya las siguientes especificaciones:- Debe incluír paginación. El usuario debe poder navegar entre paginas para ver los productos
- Se debe poder agregar un producto al carrito desde esta vista. Cada producto renderizado en esta vista debe contar con su propio botón para agregar al carrito
-
Crear una nueva vista llamada
product.handlebars
(en singular)- Cuando el usuario se encuentre navegando en la lista de productos, este debe poder hacer click en cualquiera de estos y ser redireccionado a esta nueva vista, donde se renderizarán los detalles del producto en el cual el usuario hizo click
- Esta vista también debe contar con un botón para agregar ese producto en especifico al carrito
-
Crea una nueva vista llamada
cart.handlebars
que permita visualizar los productos de un carrito en especifico