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.
Capa de Dominio
Section titled “Capa de Dominio”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.
Componentes Clave
Section titled “Componentes Clave”- 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
Capa de Aplicación
Section titled “Capa de Aplicación”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.
Componentes Clave
Section titled “Componentes Clave”- Cronjob: Aunque no está explícitamente separado en una capa de aplicación, el cronjob en
src/index.tsactú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
Capa de Infraestructura
Section titled “Capa de Infraestructura”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.
Componentes Clave
Section titled “Componentes Clave”-
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.