Skip to content

Architecture

Este documento describe la arquitectura implementada en el microservicio de Logística Inversa.

El microservicio de Logística Inversa sigue una arquitectura hexagonal (también conocida como arquitectura de puertos y adaptadores) con tres capas principales: domain, application e infrastructure. Esta arquitectura promueve la separación de responsabilidades, la testabilidad y la mantenibilidad.

La capa de dominio es el núcleo de la aplicación y contiene la lógica de negocio. Esta capa define:

  • Entities: Objetos que tienen una identidad y un ciclo de vida (ReverseLogisticsItem, ProductItem, Tara)
  • ValueObjects: Objetos inmutables que representan conceptos del dominio (Ean, Sku, Barcode, Country, Warehouse)
  • Repositories: Interfaces que definen cómo acceder y persistir entidades
  • Domain Services: Servicios que operan sobre múltiples entidades
  • Domain Events: Eventos que ocurren dentro del dominio
  • Business Rules: Reglas que gobiernan el comportamiento del dominio
  • item/: Entities y lógica relacionada con elementos de logística inversa
  • product/: Entities y lógica relacionada con productos
  • tara/: Entities y lógica relacionada con taras
  • location/: Entities y lógica relacionada con ubicaciones
  • container/: Entities y lógica relacionada con contenedores
  • warehouse/: Entities y lógica relacionada con almacenes
  • inventory/: Entities y lógica relacionada con inventario
  • valueobjects/: ValueObjects utilizados en todo el dominio
  • utils/: Funciones de utilidad para el dominio
  • observer.ts: Interfaz Observer para el patrón Observer
  • subject.ts: Interfaz Subject para el patrón Observer

La capa de aplicación orquesta el flujo de datos entre el mundo exterior y el dominio. Contiene los casos de uso de la aplicación, que representan las operaciones que el sistema puede realizar. Esta capa:

  • Coordina las entities del dominio para realizar tareas específicas
  • Implementa límites de transacción
  • Aplica reglas de negocio de alto nivel
  • Gestiona observers y subjects para la notificación de eventos
  • usecases/: Implementaciones de los casos de uso
    • items/: Casos de uso para elementos de logística inversa
    • inventory/: Casos de uso para inventario
    • location/: Casos de uso para ubicaciones
    • pending/: Casos de uso para elementos pendientes
    • reports/: Casos de uso para informes
  • observers/: Implementaciones de observers
    • sns/: Observers que publican eventos en AWS SNS
  • subjects/: Implementaciones de subjects
    • generic.ts: Implementación genérica de la interfaz Subject
    • item.ts: Subject para elementos de logística inversa
  • calendar.ts: Servicio de calendario para operaciones de fecha y hora
  • error-handler.ts: Utilidades para manejo de errores

La capa de infraestructura proporciona implementaciones concretas de las interfaces definidas en la capa de dominio. Esta capa:

  • Implementa el acceso a la base de datos
  • Proporciona adaptadores para servicios externos
  • Implementa controladores y rutas HTTP
  • Gestiona la configuración y variables de entorno
  • Implementa logging y métricas
  • http/: Servidor HTTP, controladores y rutas
    • controllers/: Controladores HTTP para manejar solicitudes
    • routes/: Rutas HTTP para definir endpoints de API
    • middlewares/: Middlewares HTTP para procesamiento de solicitudes
  • repositories/: Implementaciones de interfaces de repositorio
    • reverse-logistic-item/: Repositorio para elementos de logística inversa
    • blacklist/: Repositorio para elementos en lista negra
  • service/: Implementaciones de interfaces de servicio
    • event-dispatcher/: Implementación del despachador de eventos usando AWS SNS
  • providers/: Proveedores para inyección de dependencias
  • context/: Funcionalidad relacionada con el contexto
  • logger/: Funcionalidad de logging
  • metrics/: Recolección de métricas
  • validators/: Funcionalidad de validación
  • healthcheck/: Implementación de verificación de salud