Esta es una API RESTful desarrollada con NodeJS y ExpressJS que cuenta con una capa básica de frontend servida en espacio público del servidor.
Las funcionalidades principales son:
- Autenticación: Registro de usuario e Inicio de sesión mediante PassportJS (Local Strategy)
- CRUD de productos (Agregado, lectura, edición y eliminación).
- Agregado de productos al carrito.
- Generación de pedido (orden de compra).
- Visualización de historial de ordenes generadas.
- Envio de alertas de email a una casilla configurable con detalle de orden de compra generada (nodemailer/gmail).
- La capa de persistencia de datos implementa un "DAOFactory" que permite cambiar de forma dinamica
entre varias persistencias configurables desde variables entorno.
- Para producción:
- mongoDB (local o mongo atlas)
- firebase
- Para desarrollo:
- fileSystem
- Para producción:
- Canal de chat basado en websockets
En caso de usar el entorno de desarrollo se deberá descargar e instalar MongoDB Local:
NPM 8.19.xx
-
En primera instancia es necesario clonar el repositorio
git clone https://github.com/AVelazquez97/e-Commerce_Proyecto-Final-Backend.git
-
Es importante destacar que la versión actual del proyecto se encuentra en la branch v3
-
Luego de clonar el proyecto, es necesario abrir terminal o powershell ubicandose en el directorio del mismo para instalar todas las dependencias que están detalladas en el fichero package.json.
Esto es posible ejecutando una de las siguientes ordenes:
npm i | npm install
-
En los ficheros
development.env.example
yproduction.env.example
se encuentran la variables de entorno. Estos deben ser renombrados (retirando el .example) y ser configurados con las credenciales necesarias para la correcta ejecución del servidor. -
Para gestionar los tipos de persistencia del DAOFactory se debe alternar la variable de entorno
PERSISTENCY
con los siguientes opciones posibles:-
Desarrollo (development):
- 'mongoDB' (Local)
- 'mySQL' (Local - Proximamente. No utilizar por ahora)
-
Producción (production):
- 'mongoDB' (Atlas)
-
-
El servidor Express puede ser ejecutado mediante diversos scripts disponibles:
-
Dispositivos UNIX:
npm run development
modo desarrollo con las variables de entorno definidas en el archivodevelopment.env
.npm run production
modo producción con las variables de entorno definidas en el archivoproduction.env
.npm run start
levanta el servidor por defecto en modo producción. Invoca anpm run production
.npm run watch
con nodemon instalado.
-
Dispositivos Windows:
npm run development:win
modo desarrollo con las variables de entorno definidas en el archivodevelopment.env
.npm run production:win
modo producción con las variables de entorno definidas en el archivoproduction.env
.
-
-
Luego de poner en en marcha el proyecto, es posible acceder al frontend en la siguiente dirección:
localhost:8080/
-
Backend:
- NodeJS 18.7.xx
- NPM 8.19.xx
- Express 4.18.xx
- Express-handlebars: 6.0.xx
- Express-session: 1.17.xx
- Express-validator: 6.14.xx
- Knex: 2.4.xx
- Mysql: 2.18.xx
- Mongoose: 6.7.xx
- Connect-mongo: 4.6.0
- Cookie-parser: 1.4.6
- Bcrypt: 5.1.xx
- Dotenv: 16.0.xx
- Log4js: 6.7.xx
- Minimist: 1.2.xx
- Multer: 1.4.xx
- Nodemailer: 6.8.xx
- Passport: 0.6.xx
- Passport-local: 1.0.xx
- Twilio: 3.83.xx
- Normalizr: 3.6.xx
-
Frontend:
- Popperjs: 2.11.xx
- Bootstrap: 5.2.xx
- Boxicons: 2.1.xx
- Handlebars: 4.7.xx
- Normalizr: 3.6.xx
- Sweetalert2: 11.6.xx
-
Post de registro de usuario:
localhost:8080/auth/signup
-
Post de inicio de sesión de usuario:
localhost:8080/auth/login
-
Post de cierre de sesión de usuario:
localhost:8080/auth/logout
-
Get de todos los productos:
localhost:8080/api/productos/listado
-
Get de producto por id:
localhost:8080/api/productos/listado/id
-
Get de filtrado de productos por query params:
localhost:8080/api/productos/busqueda?name=&code=&minPrice=&maxPrice=&minStock=&maxStock=
* Luego de cada símbolo de igualdad es necesario pasar el parámetro a filtrar. (Solo uno por ocasión, a excepción del filtrado por precio o por stock que necesitan el min y el max). -
Post de producto (solo para administradores):
localhost:8080/api/productos/
-
Put de producto (solo para administradores):
localhost:8080/api/productos/id
-
Delete de producto (solo para administradores):
localhost:8080/api/productos/id
*Por el momento el modo admin es gestionado desde las variables de entorno con la clave ADMIN_MODE.
Este clave puede alternar entre dos valores: 'true' y 'false'
-
Post de creación de carrito vacío con id de cliente:
localhost:8080/api/carrito/clientId
-
Delete de carrito por id de carrito del mismo:
localhost:8080/api/carrito/id
-
Get de todos los productos en carrito por id de cliente:
localhost:8080/api/carrito/clientId/productos
-
Post de producto con id en carrito por id del mismo:
localhost:8080/api/carrito/id/productos/idProd
-
Delete de producto con id en carrito por id de cliente:
localhost:8080/api/carrito/clientId/productos/id_prod
-
Get de todas las ordenes:
localhost:8080/api/ordenes/
-
Get de orden por id:
localhost:8080/api/ordenes/id
-
Post de creación de orden:
localhost:8080/api/ordenes/id
-
Put de confirmación de orden (cambio de estado de la misma):
localhost:8080/api/ordenes/id
-
Delete de orden por id:
localhost:8080/api/ordenes/clientId/productos/id_prod
- Get de usuario que se encuentra actualmente autenticado:
localhost:8080/api/usuario
-
Tanto los id de productos como los de carrito deben ser un número entero o generado por mongoDB o firebase
-
Todos los endpoints fueron testeados con rest client y hay ejemplos en la carpeta "restClientExamples"