Git Product home page Git Product logo

nestjs-ddd-cqrs's Introduction

Aplicación de suministro de leche de depositos o bodegas (warehouse) a tiendas de barrio (store) usando DDD con CQRS

Description

Esta aplicación demuestra el funcionamiento básico entre un depósito de leche o bodega de la cual su función principal es la distribuición y provición de leche a tiendas que se encargan de vender dichos productos al público general.

Aqui se hace uso de NestJS con patrón arquitectónico DDD con CQRS emitiendo eventos handling y también sourcing para guardar la trazabilidad de transaciones hechas

  1. Diagrama de dominio con agregates para entidades root aggregates

  2. Tablas especificando los valores que va a tener cada entidad de dominio con la dependencia entidades

Preparación de entorno de forma local

  1. Tener docker instalado y configurado apropiadamente

  2. Descargar la imagen de mysql versión 8 y crear un contenedor corriendo con los siguientes valores (para almacenar toda la información principal)

    host: 'localhost', port: 5200, database: 'dairy_store', username: 'root', password: '123456',

  3. Descargar la imagen de mongo versión 3.6 y crear un contenedor corriendo con los siguientes valores (para almacenar toda la información con respecto al event sourcing)

    user: 'root', pass: '12345', database: 'eventsourcing', host: 'localhost', port: 27017

  4. Finalmente instalar los módulos de node y correr el proyecto con yarn start:dev

Funcionamiento y reglas de negocio del proyecto

Cada entidad de dominio sea warehouse y store tiene su respectivo CRUD el cual se va a explicar el funcionamiento del flujo principal

  1. Se crea un "warehouse" con las variables obligatorias especificadas y siguiendo el mismo tipado de variables como se muestra en el ejemplo. Por defecto se crea con estado de demanda "HIGH" Nota: Todos los valores del numeros tienen que ser positivos por que hablamos es de cantidades

    Ejemplo CREATE warehouse

warehouse-create

  1. Una vez creado el warehouse se puede hacer una solicitud GET PUT y DELETE del registro creado

    Ejemplo GET warehouse

warehouse-get

Ejemplo PUT warehouse

warehouse-put

Ejemplo DELETE warehouse

warehouse-delete

  1. Cuando se tenga un warehouse creado, se le puede asociar N cantidad de stores al warehouse el cual se le asocia el id de creación con el número de bolsas de leche que va a necesitar dicha tienda para vender (Nota: No puede ser mayor al número de bolsas que tiene el warehouse)

    Ejemplo CREATE store

store-create

  1. Al store se le puede hacer también CRUD como el warehouse GET PUT DELETE; al momento de crear el store va a generar un evento hacia el warehouse restandole la cantidad de bolsas de leche solicitadas, va a actualizar el campo de numero se stores subscritas y si el numero de cantidad de bolsas de leche es menor a 10 con el que queda el warehouse cambia el estado de demanda a "LOW" (event handling)

    Ejemplo GET warehouse, después de haber creado el store previamente en el ejemplo mostrado

event-handling

  1. Finalmente cada una de las transaciones hechas con la entidad de dominio store, está siendo almacenada en mongo usando el event-sourcing para mantener el registro de modificación en cada una de estas.

Ejemplo Registro de datos en mongo en base a store

event-sourcing

Nota

Si alguna duda surge, ponerse en contacto para solucionar o aclarar la dificultad presentada.

nestjs-ddd-cqrs's People

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.