Skip to content

Architecture

Este proyecto implementa una arquitectura hexagonal (también conocida como arquitectura de puertos y adaptadores), que separa la aplicación en capas distintas con responsabilidades claras. Esta arquitectura promueve la mantenibilidad, la testabilidad y la flexibilidad al desacoplar la lógica de negocio central de las preocupaciones externas.

La capa de dominio es el núcleo de la aplicación, que contiene la lógica y las reglas de negocio independientes de cualquier sistema externo.

  • Definir las entidades centrales del negocio, objetos de valor y reglas
  • Establecer las interfaces de dominio (puertos) que serán implementadas por adaptadores
  • Mantenerse independiente de frameworks y servicios externos
  • Dominio de Reabastecimiento: Define las entidades centrales y reglas de negocio para operaciones de reabastecimiento

    • types.d.ts: Define la entidad Restocking y tipos relacionados
    • service.ts: Define la interfaz RestockingService (puerto)
    • errors.ts: Define errores específicos del dominio
    • utils.ts: Contiene funciones de utilidad del dominio
  • Dominio de Cola: Define las abstracciones para operaciones de cola

    • types.d.ts: Define estructuras de mensajes y tipos de eventos
    • service.ts: Define la interfaz QueueService (puerto)
    • errors.ts: Define errores relacionados con la cola
  • Manejo de Errores: Define una jerarquía de errores de negocio para un manejo consistente de errores

La capa de aplicación orquesta el flujo de datos y coordina la ejecución de operaciones de negocio utilizando la capa de dominio.

  • Implementar casos de uso coordinando objetos y servicios de dominio
  • Mantenerse independiente de detalles de frameworks e infraestructura
  • Proporcionar una API limpia para que la capa de infraestructura utilice
  • Worker: El servicio principal de aplicación que procesa mensajes de la cola

    • RestockingSuggestionsWorker: Coordina el procesamiento de mensajes
  • Procesadores: Manejan el procesamiento de tipos específicos de eventos

    • RestockingSuggestionProcessor: Procesa eventos de transacciones de inventario para actualizar sugerencias de reabastecimiento
  • Verificadores: Validan y comprueban condiciones antes del procesamiento

    • checkProcessableEventType: Valida que un evento pueda ser procesado

La capa de infraestructura proporciona implementaciones concretas de las interfaces definidas en la capa de dominio, conectando la aplicación con sistemas y frameworks externos.

  • Implementar adaptadores para servicios y frameworks externos
  • Proporcionar implementaciones concretas de interfaces de dominio (puertos)
  • Manejar preocupaciones técnicas como persistencia, mensajería y comunicación HTTP
  • Servicios: Implementaciones concretas de interfaces de servicio de dominio

    • AwsQueueService: Implementa QueueService usando AWS SQS
    • HttpRestockingService: Implementa RestockingService usando llamadas HTTP
    • LogQueueService y LogRestockingService: Implementaciones decoradoras que añaden registro
  • Proveedores: Funciones de fábrica que crean y configuran instancias de servicio

    • getQueueService: Crea y configura una instancia de QueueService
    • getRestockingSuggestionProcessor: Crea y configura una instancia de procesador
  • Validadores: Validan datos entrantes de sistemas externos

    • EventValidator: Valida mensajes de eventos de la cola
  • Logger: Proporciona funcionalidad de registro en toda la aplicación

  • Verificación de Salud: Monitorea e informa sobre la salud de la aplicación

    • HealthState: Singleton que mantiene el estado de salud de la aplicación
  • Servidor Web: Aplicación Express para endpoints de verificación de salud