-
Realizar un sistema de recuperación de contraseña, la cual envíe por medio de un correo un botón que redireccione a una página para restablecer la contraseña (no recuperarla).
- link del correo debe expirar después de 1 hora de enviado.
- Si se trata de restablecer la contraseña con la misma contraseña del usuario, debe impedirlo e indicarle que no se puede colocar la misma contraseña
- Si el link expiró, debe redirigir a una vista que le permita generar nuevamente el correo de restablecimiento, el cual contará con una nueva duración de 1 hora.
-
Establecer un nuevo rol para el schema del usuario llamado “premium” el cual estará habilitado también para crear productos
-
Modificar el schema de producto para contar con un campo “owner”, el cual haga referencia a la persona que creó el producto
- Si un producto se crea sin owner, se debe colocar por defecto “admin”.
- El campo owner deberá guardar sólo el correo electrónico (o _id, lo dejamos a tu conveniencia) del usuario que lo haya creado (Sólo podrá recibir usuarios premium)
-
Modificar los permisos de modificación y eliminación de productos para que:
- Un usuario premium sólo pueda borrar los productos que le pertenecen.
- El admin pueda borrar cualquier producto, aún si es de un owner.
-
Además, modificar la lógica de carrito para que un usuario premium NO pueda agregar a su carrito un producto que le pertenece
-
Implementar una nueva ruta en el router de api/users, la cual será /api/users/premium/:uid la cual permitirá cambiar el rol de un usuario, de “user” a “premium” y viceversa.
A la hora de iniciar el proyecto en producción hay que modificar la api de peticiones de la carpeta src/public/js/utils/api.js
reemplazando el puerto 8080 por el puerto 3000
ADMIN
:
email: admin@gmail.com
password: 123
PREMIUM
:
email: premium@gmail.com
password: 123
USUARIO
:
email: usuario@gmail.com
password: 123
Dentro del proyecto encontrarás la siguiente estructura de directorios:
├── src/
├── config/
│ └── ...
└── controllers/
│ └── ...
└── dao/
└── db/
│ └── ...
└── memory/
│ └── ...
└── models/
│ └── ...
└── mongo/
│ └── ...
└── patterns/
│ └── ...
└── services/
└── repository/
└── ...
│└── lib/
└── error/
└── constants/
│ └── ...
└── handler/
└── ...
│└── middlewares/
│ └── ...
└── public/
│ └── ...
└── routes/
│ └── ...
└── utils/
│ └── ...
└── views/
└── layouts/
│ └── ...
└── partials/
└── ...
src/config
: Archivos de configuraciónsrc/controllers
: Controladores de las rutassrc/dao
: Todo lo relacionado con datos (MEMORY, MONGO)src/dao/memory
: Métodos para guardar los datos en memoria (archivo.json)src/dao/models
: Estructura de los datos de MONGODBsrc/dao/mongo
: Métodos para guardar los datos en una base de datos mongosrc/dao/patterns
: Diseño de los datos de la aplicaciónsrc/dao/services
: Serviciossrc/dao/services/repository
: Selección del dao a utilizar en el proyectosrc/lib
: Librerias compartidassrc/lib/err
: Libreria de custom errorsrc/lib/err/constants
: Todos los códigos e información de distintos erroressrc/lib/err/handler
: Manejador de erroressrc/middlewares
: Funciones de validaciónsrc/public
: Carpeta publica para las vistassrc/routes
: Rutas de la APIsrc/utils
: Archivos que se reutilizarán a lo largo del proyectosrc/views
: Vistas de handlebars para renderizar la interfaz del usuariosrc/views/layouts
: Plantillas de handlebarssrc/views/partials
: Componentes de handlebars
$ npm install # or `pnpm install` or `yarn install`
Ir al siguiente Directorio
├── node_modules/
├── standard/
└── ...
En el archivo eslintrc.json
pegar la siguiente configuración
{
"env": {
"browser": true
},
"extends": ["standard", "standard-jsx"]
}
$ npm start # or `pnpm start` or `yarn start`
$ npm start --mode
DEVELOPMENT
: Se conecta a la base de datos de desarrollo y el puerto de ejecución del servidor es el 8080 por defectoPRODUCTION
: Se conecta a la base de datos de producción y el puerto de ejecución del servidor es el 3000 por defecto
Por defecto se usa DEVELOPMENT
$ npm start --port
Por defecto se usa el puerto designado por el modo de desarrollo
$ npm start --store
MONGO
: Los datos se almacenan en una base de datos mongoMEMORY
: Los datos se almacenan en un archivo .json
Por defecto se usa MONGO
$ npm build # or `pnpm build` or `yarn build`