Skip to content

Architecture

Este worker implementa una arquitectura hexagonal (también conocida como arquitectura de puertos y adaptadores), que separa claramente las responsabilidades en diferentes capas. Esta arquitectura permite un alto nivel de desacoplamiento, facilitando la prueba y el mantenimiento del código.

La capa de dominio contiene las entidades centrales del negocio, reglas de negocio y lógica de dominio. Es independiente de cualquier infraestructura o tecnología específica.

  • ReverseLogisticItem: Entidad principal que representa un ítem de logística inversa con sus propiedades (id, status).
  • BusinessError: Jerarquía de errores de dominio que incluye:
    • IllegalArgumentError: Para errores de argumentos inválidos
    • UnexpectedError: Para errores inesperados
    • InternalReverseLogisticItemService: Para errores específicos del servicio de ítems de logística inversa

La capa de aplicación orquesta el flujo de datos entre el mundo exterior y el dominio. Implementa los casos de uso de la aplicación utilizando las entidades y reglas definidas en el dominio.

  • Cronjob: Aunque no está explícitamente separado en una capa de aplicación, el cronjob en src/index.ts actúa como un caso de uso que:
    • Obtiene ítems de logística inversa con más de 24 horas
    • Ejecuta la cancelación de cada ítem
    • Maneja los resultados y errores

La capa de infraestructura proporciona implementaciones concretas para interactuar con servicios externos, bases de datos, frameworks y otras tecnologías. Adapta estas tecnologías a las interfaces definidas por el dominio.

  • HTTP Server: Implementación del servidor Express para endpoints administrativos.

    • Rutas: Endpoints para verificación de salud e información.
    • Middlewares: Manejo de errores, contexto, y otros aspectos transversales.
  • Servicios:

    • ReverseLogisticsItemService: Implementación concreta que se comunica con la API externa de logística inversa.
  • Proveedores:

    • services.ts: Proporciona instancias de servicios utilizando el patrón Singleton.
  • Configuración:

    • appConfig: Configuración centralizada de la aplicación, cargada desde variables de entorno.
  • Logging:

    • Logger: Sistema de logging estructurado con contexto asíncrono.
  • Healthcheck:

    • HealthState: Seguimiento del estado de salud del cronjob.
    • Cron: Implementación de verificación de salud para el cronjob.

Esta arquitectura hexagonal permite que el dominio central permanezca aislado y libre de dependencias externas, mientras que la infraestructura proporciona las implementaciones concretas necesarias para que la aplicación funcione en un entorno real.