Coder Social home page Coder Social logo

challenges-backend-ch's Introduction

GitHub repo size GitHub stars GitHub forks Twitter Follow

Servidor basado en Node.JS y Express.JS

Este proyecto consiste en una serie de desafíos diseñados para crear y poner en funcionamiento un servidor básico basado en Node.JS y Express JS.


Índice

  1. Resumen del proyecto
  2. Tecnologias y dependencias utilizadas
  3. Inicio Rápido
  4. Vistas
  5. Documentación
  6. Recursos
  7. Ngrok
  8. Aclaración importante

Resumen del proyecto

Este proyecto consiste en una serie de desafíos diseñados para crear y poner en funcionamiento un servidor básico. A continuación, se describen los desafíos propuestos:

  • challenge-01: Se realizó una clase ProductManager que gestiona un conjunto de productos.

  • challenge-02: A la clase ProductManager creada en el desafio pasaddo se le permite agregar, consultar, modificar y eliminar un producto y manejarlo en persistencia de archivos (FS).

  • challenge-03: Se desarrolla un servidor basado en Express JS donde podemos hacer consultas a nuestro archivo de productos.

  • preentrega-01: Se desarrolla un servidor basado en Node.JS y Express JS que escucha en el puerto 8080 y contiene los endpoints y servicios necesarios para gestionar los productos y carritos de compra en el e-commerce

  • challenge-04: Se integran vistas y sockets al servidor actual configurandolo de modo que trabaje con Handlebars y WebSocket.

  • integrative-practice-01: Se agrega el modelo de persistencia de Mongo y mongoose al proyecto. Ademas, se crea una base de datos llamada ecommerce dentro de Mongo Atlas y las colecciones carts, messages y products con sus respectivos schemas.

  • preentrega-02: Se definen todos los endpoints para poder trabajar con productos y carritos contando con Mongo como sistema de persistencia principal. Además, se profesionalizan las consultas de productos con filtros, paginación y ordenamientos como asi tambien la gestión del carrito.

  • challenge-05: Se ajusta el servidor para trabajar con un sistema de login. Se incluyen todas las vistas necesarias, así también como las rutas de router para procesar el registro y el login. Una vez completado el login, se realiza la redirección directamente a la vista de productos.

  • challenge-06: Con base en el login del desafio anterior, se refactoriza incluyendo un hasheo de contraseña utilizando bcrypt. Además, se realiza una implementación de passport, tanto para register como para login y se implementa el método de autenticación de GitHub a la vista de login.

  • integrative-practice-02: Se crea un modelo User y se desarrollan las estrategias de Passport para que funcionen con este modelo de usuario. Además, se modifica el sistema de login del usuario para poder trabajar con session o jwt.

  • challenge-07: Se realizan los cambios necesarios en el proyecto para que se base en un modelo de capas. Ahora, el proyecto cuenta con capas de routing, controlador, dao, vistas bien separadas y con las responsabilidades correctamente delegadas Además, se mueven todas las partes importantes y comprometedoras del proyecto en un archivo .env para poder leerlo bajo variables de entorno.

  • preentrega-03: Se aplica una arquitectura profesional para el servidor con prácticas como patrones de diseño, mailing, variables de entorno. etc. Además, se modifica la capa de persistencia para aplicar los conceptos de Factory, DAO y DTO.

  • challenge-08: Se aplica un módulo de mocking y un manejador de errores al servidor.

  • challenge-09: Se implementa un logger definiendo un sistema de niveles que tiene la siguiente prioridad (de menor a mayor): debug, http, info, warning, error y fatal. Además, se implementa un logger para desarrollo y un logger para producción.

  • integrative-practice-03: Se realiza un sistema de recuperación de contraseña que envía por medio de un correo un botón que redireccione a una página para restablecer la contraseña Además, se establecer un nuevo rol para el schema del usuario llamado premium el cual estará habilitado también para crear productos y se modifican los permisos de modificación y eliminación de productos.

  • challenge-10: Se realizar la configuración necesaria para tener documentado el proyecto final a partir de Swagger.

  • challenge-11: Se realizan módulos de testing para el proyecto utilizando los módulos de Mocha + Chai + Supertest e incluyendo tests desarrollados para Router de products, Router de carts y Router de sessions.

  • integrative-practice-04: Se crea un endpoint en el router de usuarios que permite subir uno o múltiples archivos. Se utiliza el middleware de Multer para poder recibir los documentos que se cargan y actualizar en el usuario su status para hacer saber que ya subió algún documento en particular.

  • final-project: Se crea una vista para poder visualizar, modificar el rol y eliminar un usuario. Esta vista únicamente será accesible para el administrador del ecommerce. Se modifica el endpoint que elimina productos, para que, en caso de que el producto pertenezca a un usuario premium, le envíe un correo indicándole que el producto fue eliminado. Ademas, se finaliza las vistas pendientes para la realización de flujo completo de compra.

Tecnologias y dependencias utilizadas

Este es un módulo de Node.JS disponible a través del registro npm.

Antes de instalar, descargue e instale Node.JS. Se requiere Node.js 0.10 o superior.

El proyecto fue generado con las siguientes dependencias:

Inicio Rápido

La forma más rápida de ejecutar este proyecto con Express JS es ejecutar los comandos para generar una aplicación como se muestra a continuación:

Cree una carpeta en el directorio de su escritorio con el nombre que desee (por ejemplo: desafíos-backend-ch):

$ mkdir challenges-backend-ch

Abra el contenido de dicha carpeta:

$ cd challenges-backend-ch

Clone el repositorio en esa carpeta:

$ git clone https://github.com/eruedasanchez/challenges-backend-ch.git

Abra la carpeta final-project e instale todas las dependencias:

$ cd final-project
$ npm install

Inicie nodemon y el servidor con persistencia de archivos en MongoDB:

$ npm run dev -p mongodb

o inicie nodemon y el servidor con persistencia de archivos en FS:

$ npm run dev -p fs

Vistas

El proyecto cuenta con las siguientes vistas implementadas en Handlebars:

Visite el sitio web en: http://localhost:8080/ para registrarse como usuario, iniciar sesión y ser redirigido a la vista de productos.

Visite http://localhost:8080/chat para la aplicación de chat.

Visite http://localhost:8080/signup para registrarse como usuario en el sistema.

Visite http://localhost:8080/resetPassword para solicitar el reestablecimiento de su contraseña.

Visite http://localhost:8080/confirmNewPassword para reestablecer y confirmar su nueva contraseña.

Visite http://localhost:8080/login para iniciar su sesión como usuario.

Visite http://localhost:8080/products para ver el listado de productos cargados en la base de datos.

Visite http://localhost:8080/carts/:cid para ver el contenido del carrito con Id cid.

Visite http://localhost:8080/realtimeproducts para ver el listado de productos en tiempo real.

Visite http://localhost:8080/mockingproducts para ver el contenido de una serie de productos generados aleatoriamente.

Visite http://localhost:8080/loggerTest para ver el contenido del sistema de logs creados

Visite http://localhost:8080/adminPanel para ver el panel de administración que solo es accesible al administrador

Visite http://localhost:8080/orderDetail/:cid/purchase para ver el detalle del pedido realizado por el usuario que tiene asignado el carrito con Id cid.

Visite http://localhost:8080/successPurchase para ver el mensaje de finalización de compra cuando es exitosa.

Visite http://localhost:8080/cartDetail para ver el detalle de los productos agregados al carrito.

Para los endpoints relacionados al CRUD para colecciones de Productos, Carros y Mensajes ejecutarlos con Postman.

Documentación

La documentación referida a todos los endpoints relacionados al CRUD del servidor las puede encontrar en http://localhost:8080/api-docs/

Recursos

El proyecto cuenta tanto con variables de entorno como con usuarios de prueba de MercadoPago para realizar la compra de productos. Estos recursos se encuentran adjuntos en un archivo privado enviado al usuario de la aplicación.

Ngrok

Se utiliza la herramienta Ngrok para exponer el aplicativo local a la web y crear un tunel sin la necesidad de subir la aplicación a un servidor. El objetivo es crear el tunel para poder realizar la integración de Mercadopago con nuestro aplicativo para procesar los pagos utilizandolo en la propiedad de notification_url en la preference en el archivo mercadoPago.router.js.

En caso de que la URL brindada NO responda a la solicitud, se recomienda crearse una cuenta (gratuita) en Ngrok, descargar el ejecutable de Ngrok en su computadora para su respectivo sistema operativo (en mi caso MacOS) y ejecutar los siguientes comandos:

Comenzamos creando una carpeta en nuestro directorio llamada ng de la siguiente manera:

$ cd Desktop
$ mkdir ng

Luego, abrimos la carpeta ng:

$ cd ng

Conectamos nuestra cuenta con el token de autorización que nos brinda Ngrok.

Ngrok

Luego, ejecutamos:

$ ./ngrok config add-authtoken 2bBrHTSrYrDpfcLUczLwV3YfKHW_2U5f39oyiAiCZ8U1QhSvo 

Por último, creamos la direccion https para el servidor local (en nuestro caso 8080) que deseemos ejecutando el comando:

$ ./ngrok http 8080 

Obteniendo el tunel y copiandolo en el campo notification_url cuando creamos la preference de MercadoPago.

Ngrok

Aclaración importante

Los endpoints relacionados con el CRUD de la API que sean evaluados con Postman y requieran auteticación o permisos, su cookie que contiene el JWT deberá ser copiada manualmente con su respectivo nombre, valor y fecha de expiración previo a ejecutar el endpoint. Quedo abierto a cualquier sugerencia para que este proceso sea automatico y no manual.

challenges-backend-ch's People

Contributors

eruedasanchez avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.