El proyecto final del curso de Backend en Coderhouse consistió en el desarrollo de un backend para una aplicación de e-commerce, con el objetivo de ofrecer a los usuarios la posibilidad de comprar y vender productos en línea de manera sencilla y segura.
Tecnologías utilizadas:
- Node js
- Express js
- Mongo DB
- Socket.io
Utilicé render.com para el despliegue, ya que no me solicitaba una tarjeta de crédito y era fácil de asociar con GitHub. La desventaja es que no hay servidores en Sudamérica, lo que puede ralentizar la interacción con la aplicación.
Aquí está la documentación para poder desplegar una aplicación de Node en render.com.
Enlace a la WebApp
Para poder ejecutarlo en tu ordenador, debes de tener Nodejs instalado. En el caso que no lo tengas puedes descargarlo desde la web de Nodejs o recomendado utilizar nvm.
Sigue los siguientes pasos:
git clone https://github.com/martinfyic/proyecto-nodejs-ecommerce.git
cd proyecto-nodejs-ecommerce
npm install
touch .env
Las variables de entorno deben ir en el archivo .env
que acabas de crear. En el repositorio descargado, encontrarás un archivo .env.example
para que puedas guiarte.
- Nro de puerto
PORT=
- Url de mongo atlas
MONGODB_URL=
- secret para JWT
SECRET_PRIVATE_KEY=
- Google login
GOOGLE_CLIENT_ID=
&GOOGLE_SECRET_ID=
- Nodemailer
NODEMAILER_EMAIL=
,NODEMAILER_EMAIL_ADMIN=
&NODEMAILER_PASS=
( NODEMAILER_EMAIL & NODEMAILER_EMAIL_ADMIN pueden optar por usar el mismo mail en ambos, en mi caso opte por tener un mail que se encargue de gestionar todos los envios y un email admin al cual se le envia lo necesario, como por ejemplo cuando un usuario se registra ) - Claudinary API Environment variable
CLOUDINARY_URL=
una vez descargado el repositorio y configurado las variables de entorno:
npm start
# ó con nodemon
npm run dev
- bcryptjs: 2.4.3
- cloudinary: 1.35.0
- cors: 2.8.5
- dotenv: 16.0.3
- ejs: 3.1.9
- express: 4.18.2
- express-fileupload: 1.4.0
- express-validator: 6.15.0
- google-auth-library: 8.7.0
- jsonwebtoken: 9.0.0
- mongoose: 7.0.3
- nodemailer: 6.9.1
- socket.io: 4.6.1
- uuid: 9.0.0
- winston: 3.8.2
- nodemon: 2.0.22 --> ( para ejecutar el script
npm run dev
es necesaria tener instalado nodemon de forma global o en el proyecto como DevDependencie)
Para los enpoints puedes ver la documentación de POSTMAN donde deje ejemplos de peticiones
- Autenticación de usuarios con email y contraseña. POST
/login
- Autenticación de usuarios con cuenta de Google. POST
/google
- Listar todos los carritos de compras. GET
/
- Listar carrito de compras. GET
/:id
- Crear carrito de compras. POST
/
- Desactivar carrito de compras. DELETE
/:id
- Agregar productos al carrito dde compras. POST
/:id/products
- Eliminar productos al carrito dde compras. DELETE
/:id/products/:prodId
- Listar todas las categorias. GET
/
- Listar categoria. GET
/:id
- Crear categoria. POST
/
- Actualizar categoria. PUT
/:id
- Desactivar categoria. DELETE
/:id
- Listar todas las órdenes de compras. GET
/
- Crear orden de compra. POST
/:idCart
- Listar todos los productos. GET
/
( Vista creada con ejs para el front) - Listar producto. GET
/:id
- Crear producto. POST
/
- Actualizar producto. PUT
/:id
- Desactivar producto. DELETE
/:id
En este endpoint la idea fue poder generar una entrada para poder realizar busquedas flexibles, es decir, puedo realizar busquedas dependiendo la colleccion de la base de datos y el termino de busqueda.
- Busqueda flexible. GET
/:collection/:term
Es requerido tener configurado cloudinary
- Listar imagen de Usuario o Producto. GET
/:collection/:id
- Actualizar imagen ed Usuario o Producto. PUT
/:collection/:id
- Registro de usuarios con email y contraseña. POST
/
- Listar usuarios registrados. GET
/
- Listar usuario registrado. GET
/:id
- Actualizar usuario registrado. PUT
/:id
- Actualizar role de usuario registrado. PUT
/:id/roleupdate
( Solo ADMIN_USER ) - Desactivar usuario registrado. DELETE
/:id
( Solo ADMIN_USER )
El chat ofrece la posibilidad de enviar mensajes de forma global a todos los usuarios conectados, así como de establecer comunicación directa entre dos usuarios específicos. Para ello, solo es necesario introducir el identificador del usuario destinatario en el campo de entrada uid
para enviar el mensaje exclusivamente a esa persona.
Este proyecto me permitió adquirir conocimientos y habilidades en el desarrollo de aplicaciones backend con Node.js y MongoDB, así como en el uso del framework Express.js y la librería Socket.io para crear una API REST y un sistema de chat en tiempo real.
Aprendí sobre la implementación de autenticación y autorización de usuarios utilizando JWT, el uso de Cloudinary para almacenar imágenes de productos, la integración de la API de Google para autenticación, la implementación de envío de emails con Nodemailer, y la gestión de carritos de compras y órdenes de compra.
En definitiva, este proyecto me permitió aplicar muchos de los conceptos y herramientas aprendidos en el curso de Backend de Coderhouse, y me dejó una base sólida para seguir aprendiendo y mejorando en el futuro.