Proyecto Final del Curso de Programación Backend
- Clona el repositorio.
- Instala las dependencias con
npm install
. - Configura las variables de entorno en un archivo
.env
. - Inicia el servidor con
npm start
(por defecto utiliza persitencia de MongoDB).
npm run devmongo
: Utiliza nodemon para iniciar el servidor con persistencia en MongoDBnpm run devfile
: Utiliza nodemon para iniciar el servidor con persistencia en FileSystem. La persistencia FILE tiene algunas características pendientes de desarrollo, por lo que la experiencia es limitada.npm run test
: Utiliza mocha para iniciar un test integral al servidor con supertest y chai. Es necesario que antes se habilite el modo test en la variable correspondiente del archivo .env
El backend de la aplicación utiliza un patrón DAO en su estructura, patrón DTO para evitar la exposición de datos sensibles, patrón factory para manejar distintas persistencias y patrón de repository para los servicios. En tanto en el frontend se utiliza handlebars para las vistas de interacción con el usuario.
Cuenta con un modulo de test (ver sección de Scripts) y un mock de productos en el endpoint para realizar pruebas de rendimiento.
Posee el logger de winston para registrar eventos tanto en modo desarrollo como en modo producción, puedes probarlo en el endpoint /api/loggertest
.
El chat entre usuarios y la administración de productos (agregar, actualizar y eliminar) utiliza websocket para que las actualizaciones se efectuen en el momento. Se le incorporó un manejador de errores que se puede ampliar según la necesidad del programador y un controlador de roles para limitar el acceso a las rutas según el rol del usuario.
Por último para subir archivos y documentos a la carpeta pública se usa multer y para dar aviso por mail del ticket de compra, eliminación de cuentas de usuarios inactivos y de productos de usuarios premium se emplea nodemailer.
La aplicación utiliza estrategias de passport para registro de usuarios, logueo por contraseña y logueo usando credenciales de GitHub. Asimismo posee un manejo de sesiones de usuario y protección de endpoints utilizando JWT. El ADMINISTRADOR puede ver el listado de usuarios, cambiarles el rol (USER o PREMIUM) y eliminar todos aquellos que se encuentren inactivos por más de 2 días. Este usuario se configura mediante variables de entorno. Los usuarios con rol USER pueden subir documentación, chatear con otros usuarios y comprar productos. Los usuarios con rol PREMIUM tienen todos los priviliegios de un USER y ademas cuentan con la posibilidad de agregar, actualizar y eliminar productos. El usuario cuenta con la posibilidad de reestablecer su contraseña en caso de olvidarla y su página de inicio se personaliza según el rol y privilegios, mostrando los botones habilitados.
Características con rol USER
Caraterísticas con rol PREMIUM
Caraterísticas con rol ADMINISTRADOR
El usuario puede aplicar distintos filtros para encontrar el producto deseado, puede entrar a una vista detallada del mismo y agregarlos al carrito. Dentro del carrito puede agregar o quitar más unidades del producto, eliminarlo, vaciar el carrito y efectuar la compra a través de Mercado Pago
Para mayores detalles sobre rutas, schemas, parámetros, requests y responses de productos y carritos puedes acceder al endpoint /apidocs
del proyecto.
- Node.js
- Express
- MongoDB
- Mongoose
- Socket.io
- Swagger
- JWT
- GitHub OAuth
- Mercado Pago
- Handlebars
- Faker.js
- Bcrypt
- Cors
- Cookie-parser
- Dotenv
- Multer
- Nodemailer
- Winston
- Haz un fork del proyecto.
- Crea una nueva rama (
git checkout -b feature/feature-name
). - Haz commit a tus cambios (
git commit -am 'Añadir nueva funcionalidad'
). - Haz push a la rama (
git push origin feature/feature-name
). - Crea un pull request.
Mario Aguilar GitHub: https://github.com/mario-r-aguilar LinkedIn: https://www.linkedin.com/in/mario-r-aguilar/
https://cba-e-commerce.up.railway.app
ISC License
Copyright (c) 2024, Mario R. Aguilar
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.