Worker
El Worker de Sugerencias de Reabastecimiento es responsable de procesar eventos de transacciones de inventario y actualizar sugerencias de reabastecimiento basadas en esos eventos. Sigue un flujo de proceso bien definido para asegurar actualizaciones fiables y consistentes.
RestockingSuggestionsWorker
Section titled “RestockingSuggestionsWorker”Descripción: El componente principal del worker que coordina el procesamiento de mensajes de transacciones de inventario desde la cola.
Estructura del Mensaje de Entrada:
interface InventoryTransactionMessage { type: string; data: { entryId: string; transactionId: string; productId: string; productEan: string; locationId: string; locationType: LocationType; containerId?: string; stock: number; description: string; transactionQuantity: number; timestamp: string; }; context: { country: string; warehouse: string; };}Salida: Entidad Restocking actualizada con sugerencias renovadas.
Flujo de Procesamiento
Section titled “Flujo de Procesamiento”-
Recepción de Mensajes:
- El worker sondea la cola SQS en busca de mensajes
- Los mensajes se reciben en lotes (hasta 10 a la vez)
- Cada mensaje contiene un evento de transacción de inventario
-
Procesamiento de Mensajes:
- Para cada mensaje, el worker:
- Extrae los datos del evento
- Los pasa al RestockingSuggestionProcessor
- Para cada mensaje, el worker:
-
Validación de Eventos:
- El procesador verifica si el tipo de evento es procesable
- Valida el formato del evento usando el EventValidator
-
Recuperación de Reabastecimiento:
- Recupera el registro de reabastecimiento activo basado en:
- EAN del producto
- Almacén
- País
- Recupera el registro de reabastecimiento activo basado en:
-
Verificación de Mutabilidad:
- Verifica que el registro de reabastecimiento pueda ser actualizado
- Comprueba el estado y otras condiciones
-
Actualización de Sugerencias:
- Llama al RestockingService para actualizar sugerencias
- El servicio se comunica con la API del Gestor de Reabastecimiento
-
Finalización de Mensajes:
- En caso de procesamiento exitoso, el mensaje se elimina de la cola
- En ciertos errores de negocio (por ejemplo, reabastecimiento no encontrado), el mensaje también se elimina
- En errores inesperados, el mensaje permanece en la cola para reintento
-
Registro de Métricas:
- El worker registra métricas de procesamiento:
- Total de eventos procesados
- Conteo de éxitos
- Conteo de fallos
- Tiempo de procesamiento
- El worker registra métricas de procesamiento:
Puertos y Adaptadores Involucrados
Section titled “Puertos y Adaptadores Involucrados”-
Puerto QueueService: Interfaz para operaciones de cola
- Adaptador AwsQueueService: Implementa operaciones de cola usando AWS SQS
-
Puerto RestockingService: Interfaz para operaciones de reabastecimiento
- Adaptador HttpRestockingService: Implementa operaciones de reabastecimiento usando llamadas HTTP a la API del Gestor de Reabastecimiento
-
Puerto Processor: Interfaz para procesar eventos
- Adaptador RestockingSuggestionProcessor: Implementa la lógica de procesamiento para eventos de transacciones de inventario
Reglas de Negocio
Section titled “Reglas de Negocio”-
Validación de Tipo de Evento:
- Solo se procesan tipos de eventos específicos
- Otros son rechazados con EventTypeUnprocessableError
-
Mutabilidad de Reabastecimiento:
- Los registros de reabastecimiento deben estar en un estado mutable para ser actualizados
- Los registros inmutables se omiten con RestockingImmutableError
-
Jerarquía de Manejo de Errores:
- Los errores de negocio (específicos del dominio) se manejan de manera diferente a los errores inesperados
- Algunos errores de negocio permiten la eliminación de mensajes, otros no
Posibles Errores y Excepciones
Section titled “Posibles Errores y Excepciones”-
EventTypeUnprocessableError:
- Causa: El tipo de evento no es compatible para procesamiento
- Manejo: Registrar advertencia, eliminar mensaje de la cola
-
InvalidEventFormatError:
- Causa: El formato del mensaje de evento es inválido
- Manejo: Registrar error, eliminar mensaje de la cola
-
RestockingNotFoundError:
- Causa: No se encontró registro de reabastecimiento activo para los parámetros dados
- Manejo: Registrar advertencia, eliminar mensaje de la cola
-
RestockingImmutableError:
- Causa: El registro de reabastecimiento no puede ser actualizado (por ejemplo, estado incorrecto)
- Manejo: Registrar advertencia, eliminar mensaje de la cola
-
RestockingServiceError:
- Causa: Error al comunicarse con la API del Gestor de Reabastecimiento
- Manejo: Registrar error, dejar mensaje en la cola para reintento
-
UnexpectedError:
- Causa: Cualquier error inesperado durante el procesamiento
- Manejo: Registrar error, dejar mensaje en la cola para reintento