Skip to content

Architecture

El microservicio de Utilidades de Inventario WMS está implementado siguiendo los principios de la arquitectura hexagonal (también conocida como arquitectura de puertos y adaptadores). Esta arquitectura permite una clara separación de responsabilidades y facilita la mantenibilidad y testabilidad del código.

Contiene la lógica de negocio central y las reglas del dominio de inventario, independiente de cualquier infraestructura o tecnología específica.

  • Entidades: Representan los conceptos fundamentales del dominio.

    • Container: Representa un contenedor físico que puede almacenar productos.
    • Inventory: Representa el inventario de productos.
    • Location: Representa una ubicación físicas en el almacén.
    • Metric: Representa métricas relacionadas con operaciones de inventario.
  • Value Objects: Objetos inmutables que representan conceptos del dominio sin identidad propia.

    • LocationName: Nombre de una ubicación.
    • ContainerName: Nombre de un contenedor.
    • Country: País donde se encuentra el almacén.
    • Warehouse: Almacén específico.
  • Servicios de Dominio: Implementan lógica de negocio que no pertenece naturalmente a una entidad específica.

    • ContainerService: Define operaciones relacionadas con contenedores.
    • InventoryService: Define operaciones relacionadas con el inventario.
    • LocationService: Define operaciones relacionadas con ubicaciones.
    • MetricService: Define operaciones relacionadas con métricas.
  • Errores de Dominio: Definen excepciones específicas del dominio.

    • BusinessError: Error base para excepciones de negocio.
    • IllegalArgumentError: Error para argumentos inválidos.

Orquesta el flujo de datos entre la capa de dominio y la capa de infraestructura, implementando los casos de uso de la aplicación.

  • Casos de Uso: Implementan las operaciones específicas que la aplicación puede realizar.

    • AdjustmentProduct: Ajusta el inventario de productos.
    • MoveContainers: Mueve contenedores entre ubicaciones.
  • DTOs (Data Transfer Objects): Objetos que transportan datos entre procesos.

    • AdjustmentProductParams: Parámetros para ajustar el inventario de productos.
    • MoveContainerParams: Parámetros para mover contenedores.
  • Manejadores de Errores: Gestionan los errores que ocurren durante la ejecución de los casos de uso.

    • handleError: Función para manejar errores en los casos de uso.
  • Utilidades de Aplicación: Funciones auxiliares para los casos de uso.

    • sortEntriesWithStrategy: Ordena entradas de inventario según una estrategia específica.

Proporciona implementaciones concretas de las interfaces definidas en el dominio, interactuando con sistemas externos, bases de datos, y otros recursos.

  • Adaptadores de Entrada (Controladores): Reciben solicitudes externas y las traducen a llamadas a casos de uso.

    • Controladores HTTP en la carpeta http.
  • Adaptadores de Salida (Repositorios y Servicios): Implementan las interfaces del dominio para interactuar con sistemas externos.

    • HttpInventoryService: Implementación del servicio de inventario que se comunica con una API HTTP.
    • HttpContainerService: Implementación del servicio de contenedores que se comunica con una API HTTP.
    • HttpLocationService: Implementación del servicio de ubicaciones que se comunica con una API HTTP.
    • OtelMetricService: Implementación del servicio de métricas que utiliza OpenTelemetry.
  • Configuración: Gestiona la configuración de la aplicación.

    • Archivos en la carpeta config.
  • Middleware: Componentes que procesan las solicitudes HTTP antes de llegar a los controladores.

    • Middleware de logging de errores.
    • Middleware de validación.
  • Utilidades de Infraestructura: Funciones auxiliares para la capa de infraestructura.

    • Utilidades en utils.ts.