Skip to content

Architecture

El Worker de Evaluación de Reabastecimiento Urgente está construido siguiendo los principios de la Arquitectura Hexagonal (también conocida como Puertos y Adaptadores). Esta arquitectura separa la aplicación en tres capas principales: Dominio, Aplicación e Infraestructura. Esta separación permite una mejor capacidad de prueba, mantenibilidad y flexibilidad.

La capa de Dominio es el núcleo de la aplicación y contiene la lógica de negocio y las entidades.

  • Definir las entidades y reglas de negocio principales
  • Implementar la lógica específica del dominio
  • Definir interfaces (puertos) que la aplicación utilizará para interactuar con sistemas externos
  • Entidades de Dominio:

    • OrderRequirementOnHold: Representa un requisito de pedido que está en espera debido a reabastecimiento pendiente
    • Restocking: Representa una alerta de reabastecimiento con propiedades como id, ean, tipo, nivel, país y almacén
  • Servicios de Dominio:

    • QueueService: Interfaz para interactuar con colas de mensajes
    • RestockingService: Interfaz para gestionar alertas de reabastecimiento
  • Errores de Dominio:

    • BusinessError: Clase base para todos los errores de negocio
    • InvalidEventFormatError: Error para formatos de eventos inválidos
    • UnprocessableEventTypeError: Error para eventos que no pueden ser procesados
    • WarehouseNotFoundError: Error cuando no se encuentra un almacén
    • WarehouseNotEnabledError: Error cuando un almacén no está habilitado para reabastecimiento urgente
    • RestockingAlreadyExistsError: Error cuando ya existe una alerta de reabastecimiento

La capa de Aplicación orquesta el flujo de datos y coordina los objetos de dominio para realizar casos de uso específicos.

  • Implementar casos de uso coordinando objetos de dominio
  • Traducir entre las capas de dominio e infraestructura
  • Manejar la lógica específica de la aplicación que no pertenece al dominio
  • Worker:

    • UrgentEvaluatorWorker: Coordina el proceso de recibir mensajes, procesarlos y eliminarlos de la cola
  • Procesador:

    • UrgentEvaluatorProcessor: Implementa la lógica de negocio para procesar eventos de requisitos de pedidos en espera
  • Verificadores:

    • checkIfEventIsProcessable: Valida si un evento puede ser procesado
    • checkIfWarehouseExists: Verifica si existe un almacén
    • checkWarehouseFlag: Verifica si un almacén tiene habilitada la bandera de característica necesaria

La capa de Infraestructura proporciona implementaciones concretas de las interfaces definidas en la capa de dominio y maneja la comunicación con sistemas externos.

  • Implementar adaptadores para sistemas externos (bases de datos, colas de mensajes, APIs)
  • Proporcionar implementaciones concretas de interfaces de dominio
  • Manejar preocupaciones técnicas como comunicación HTTP, serialización de mensajes, etc.
  • Servicios:

    • AwsQueueService: Implementa la interfaz QueueService para AWS SQS
    • HttpRestockingService: Implementa la interfaz RestockingService para comunicación HTTP
  • Proveedores:

    • getQueueService: Función de fábrica para crear instancias de QueueService
    • getRestockingService: Función de fábrica para crear instancias de RestockingService
    • getWorker: Función de fábrica para crear instancias de Worker
  • Servidor HTTP:

    • Servidor Express para endpoints de verificación de salud
    • Middleware para manejo de errores y registro
  • Verificación de Salud:

    • HealthState: Singleton para rastrear el estado de salud de la aplicación
    • Endpoints de verificación de salud para monitorear la aplicación
  • Logger:

    • Infraestructura de registro para la aplicación