Skip to content

Architecture

Este documento describe la arquitectura implementada en el worker para el procesamiento de asignación de ubicaciones.

El proyecto sigue una arquitectura hexagonal (también conocida como puertos y adaptadores), que separa la aplicación en 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 con identidad y ciclo de vida (Warehouse, LocationAssignment)
  • ValueObjects: Objetos inmutables que representan conceptos del dominio (Ean, WarehouseCode, Country)
  • Domain Services: Servicios que operan sobre las entidades del dominio
  • Domain Errors: Tipos de error personalizados para excepciones específicas del dominio
  • Interfaces/Ports: Contratos que la capa de infraestructura debe implementar
  • assignments/: Entities y lógica relacionada con asignaciones de ubicación
  • queue/: Interfaces y tipos para operaciones de cola
  • warehouse/: Entities y lógica relacionada con warehouses
  • valueobjects/: ValueObjects compartidos como Country
  • errors.ts: Errores de negocio comunes

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 lógica de negocio que involucra múltiples entidades del dominio
  • No contiene preocupaciones de infraestructura (por ejemplo, acceso a base de datos, APIs externas)
  • processors/: Implementaciones de procesadores de eventos
    • event.ts: Procesador principal de eventos que delega a procesadores específicos
    • new-product.ts: Procesador para eventos de nuevos productos
    • state.ts: Procesador para eventos de cambio de estado de productos
  • worker.ts: Implementación principal del worker que ejecuta el ciclo de procesamiento
  • checkers/: Lógica de validación y verificació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 (APIs HTTP, AWS SQS)
  • Proporciona adaptadores para dependencias externas
  • Maneja preocupaciones técnicas como logging, configuración y health checks
  • services/: Implementaciones de interfaces de servicio del dominio
    • assignments/: Implementación de LocationAssignmentService usando HTTP
    • warehouse/: Implementación de WarehouseService usando HTTP
    • queue/: Implementación de QueueService usando AWS SQS
  • providers/: Métodos factory para crear instancias de servicios
  • logger/: Configuración de logging
  • healthcheck/: Implementación de API de health check
  • validation/: Implementación de lógica de validación usando zod
  1. El worker es activado por un cron job en intervalos regulares
  2. Recibe mensajes de la cola SQS
  3. Para cada mensaje:
    • Valida el evento
    • Recupera información de warehouses
    • Procesa el evento según su tipo:
      • Para nuevos productos: Crea asignaciones de ubicación y actualiza su estado
      • Para cambios de productos: Actualiza el estado de las asignaciones de ubicación existentes
    • Elimina el mensaje de la cola si el procesamiento es exitoso
  4. Registra los resultados del procesamiento