Skip to content

API Restful desarrollada con ExpressJS y NodeJS + Frontend simple con VanillaJS

Notifications You must be signed in to change notification settings

AVelazquez97/eCommerceNodeJS

Repository files navigation

Proyecto backend e-commerce con NodeJS

Resúmen

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:

  1. Autenticación: Registro de usuario e Inicio de sesión mediante PassportJS (Local Strategy)
  2. CRUD de productos (Agregado, lectura, edición y eliminación).
  3. Agregado de productos al carrito.
  4. Generación de pedido (orden de compra).
  5. Visualización de historial de ordenes generadas.
  6. Envio de alertas de email a una casilla configurable con detalle de orden de compra generada (nodemailer/gmail).
  7. 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
  8. Canal de chat basado en websockets

1. Puesta en marcha

A. Requisitos previos

NodeJS

En caso de usar el entorno de desarrollo se deberá descargar e instalar MongoDB Local:

NPM 8.19.xx

MongoDB

B. Instalación del proyecto y dependencias

  • 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
    

C. Ejecución en localhost

  • En los ficheros development.env.example y production.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 archivo development.env.
      • npm run production modo producción con las variables de entorno definidas en el archivo production.env.
      • npm run start levanta el servidor por defecto en modo producción. Invoca a npm run production.
      • npm run watch con nodemon instalado.
    • Dispositivos Windows:

      • npm run development:win modo desarrollo con las variables de entorno definidas en el archivo development.env.
      • npm run production:win modo producción con las variables de entorno definidas en el archivo production.env.
  • Luego de poner en en marcha el proyecto, es posible acceder al frontend en la siguiente dirección: localhost:8080/

2. Tecnologías y librerías utilizadas

  • 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

3. AUTH Endpoints

  • 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

4. API Endpoints

A. Productos:

  • 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'

B. Carritos:

  • 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

C. Ordenes:

  • 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

D. Usuario:

  • Get de usuario que se encuentra actualmente autenticado: localhost:8080/api/usuario

Importante:

  • 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"

About

API Restful desarrollada con ExpressJS y NodeJS + Frontend simple con VanillaJS

Topics

Resources

Stars

Watchers

Forks