Skip to content

Architecture

Este documento describe la arquitectura implementada en el worker para el procesamiento de demanda de productos.

El worker sigue una arquitectura hexagonal (también conocida como puertos y adaptadores) con tres capas principales: dominio, aplicación e infraestructura. 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 representan conceptos de negocio (ProductDemand)
  • ValueObjects: Objetos inmutables que representan conceptos en el dominio (EventType)
  • Ports: Interfaces que definen cómo la aplicación interactúa con sistemas externos (DemandService, QueueService)
  • Business Rules: Reglas que gobiernan el comportamiento del dominio
  • demand/: Contiene la entidad ProductDemand, el enum EventType y la interfaz DemandService
  • queue/: Contiene la interfaz EventOrderChange, la interfaz QueueService y tipos relacionados
  • errors/: Contiene definiciones de errores de negocio
  • validator/: Contiene interfaces de validación

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 entidades del dominio para realizar tareas específicas
  • Implementa el flujo de trabajo de negocio
  • Maneja la validación y gestión de errores
  • Es independiente de frameworks y tecnologías externas
  • processor.ts: Implementa la lógica de negocio principal para procesar eventos de cambio de pedidos
  • worker.ts: Orquesta el flujo de trabajo de recepción de mensajes, procesamiento y manejo de resultados
  • checkers.ts: Contiene funciones de validación para eventos

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

  • Implementa el acceso a servicios externos (AWS SQS, API de Demanda de Productos)
  • Proporciona adaptadores para los puertos definidos en el dominio
  • Maneja preocupaciones técnicas como peticiones HTTP, colas de mensajes, etc.
  • Contiene código de configuración y arranque
  • services/: Contiene implementaciones de interfaces de servicio del dominio
    • queue/: Implementación de QueueService usando AWS SQS
    • demand/: Implementación de DemandService usando peticiones HTTP
  • validation/: Implementación de validación usando Zod
  • providers/: Funciones factory para crear instancias de servicios
  • logger/: Implementación de logging
  • healthcheck/: Implementación de verificación de salud para monitoreo
  1. El worker es activado por un cron job a intervalos regulares
  2. Recibe mensajes de la cola SQS que contienen eventos de cambio de pedidos
  3. Cada evento es validado y verificado para determinar si es procesable
  4. Los eventos válidos son transformados en registros de demanda de productos
  5. Los registros de demanda son enviados a la API de Demanda de Productos
  6. Los mensajes procesados son eliminados de la cola
  7. Los errores son registrados y manejados según su tipo