Architecture
Este documento describe la arquitectura implementada en el worker para el procesamiento de asignación de ubicaciones.
Arquitectura
Section titled “Arquitectura”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.
Capa de Dominio
Section titled “Capa de Dominio”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
Componentes Principales
Section titled “Componentes Principales”assignments/: Entities y lógica relacionada con asignaciones de ubicaciónqueue/: Interfaces y tipos para operaciones de colawarehouse/: Entities y lógica relacionada con warehousesvalueobjects/: ValueObjects compartidos como Countryerrors.ts: Errores de negocio comunes
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. 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)
Componentes Principales
Section titled “Componentes Principales”processors/: Implementaciones de procesadores de eventosevent.ts: Procesador principal de eventos que delega a procesadores específicosnew-product.ts: Procesador para eventos de nuevos productosstate.ts: Procesador para eventos de cambio de estado de productos
worker.ts: Implementación principal del worker que ejecuta el ciclo de procesamientocheckers/: Lógica de validación y verificación para eventos
Capa de Infraestructura
Section titled “Capa de Infraestructura”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
Componentes Principales
Section titled “Componentes Principales”services/: Implementaciones de interfaces de servicio del dominioassignments/: Implementación de LocationAssignmentService usando HTTPwarehouse/: Implementación de WarehouseService usando HTTPqueue/: Implementación de QueueService usando AWS SQS
providers/: Métodos factory para crear instancias de servicioslogger/: Configuración de logginghealthcheck/: Implementación de API de health checkvalidation/: Implementación de lógica de validación usando zod
Flujo de Datos
Section titled “Flujo de Datos”- El worker es activado por un cron job en intervalos regulares
- Recibe mensajes de la cola SQS
- 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
- Registra los resultados del procesamiento