Giter Site home page Giter Site logo

express_3_layers's Introduction

Información General

Este proyecto es una Rest Api de users, cuenta con un una unica tabla en la db para almacenar usuarios.
El proyecto cuenta con test unitarios de la api(supertest para probar app con todas su dependencias) y un test unitario de userService.

Arquitectura

Esta api fue diseñada siguiendo los conceptos de clean architecture y SOLID, el handler de cada ruta esta siguiendo la arquitectura 3 layers.

Controller para controlar a req y res, pasarle valores a services y responder en base a lo que nos devuelva service.
Service para controlar la logica de negocio y ocupar a Model.
Model para representar una tabla de la db como objeto, el modelo es generado mediante sequelize-cli y los metodos
que adquiere son de este orm.

Controller y service estan ocupando los conceptos SOLID para generar una clase limpia y que podamos testear sin problemas.
Para apoyar el testing de estas clases, aplique inyección de dependencias en su constructor para que puedas ocupar mocks o simplemente pasarle su dependencia real.

Caching

Estoy ocupando el paquete npm redis para generar una conexion con el redis local.
El cliente es inyectado en el servicio de user, posteriormente lo uso para hacer caching de getOne.
La llave de getOne esta configurara para morir en 240 segundos, como tambien esta siendo modificada cuando se ocupa
updateOne(set de los datos actualizados) y deleteOne(del de la llave).

Testing

userApi esta usando supertest, con esta libreria podemos simular que nuestra api fue levantada completamente y hacer consultas HTTP sobre ella.
Este test es util si lo quieres usar para probar tus rutas sin la dependencia de postman/insomia.

userService esta validando el comportamiento del service, podemos testear sus metodos siempre y cuando inyectemos la dependencia de modelo.

Sequelize cli

Este proyecto esta conectandose a la base de datos mediante el orm sequelize.
Su cli nos permite autogenerar la configuración inicial de sequelize(models/index.js) , generar modelos mediante su cli, crear la db y correr migraciones.

Importante!

Te recomiendo que despues de hacer npm install y antes de levantar la api con docker, ejecutes estos comandos para que ahorres tiempo en interactuar directamente con postgres.
sequelize-cli db:create // para crear la base de datos en base a los datos de config.json en la carpeta config
sequelize-cli db:migrate // para crear la tabla de users en base al modelo de este.

Scripts npm

En este proyecto, puedes usar:

npm run start

Para correr el proyecto en producción.

npm run dev

Para que puedas trabajar con reinicio automatico de servidor ante cambios en el codigo.

npm run test

Para correr test unitarios con Jest.

express_3_layers's People

Contributors

javiercollipal avatar

Watchers

James Cloos avatar  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.