Worker
Este worker se encarga de cancelar automáticamente los ítems de logística inversa que tienen más de 24 horas desde su creación. Este proceso de limpieza ayuda a mantener el sistema de logística inversa libre de ítems antiguos que ya no deberían estar activos.
Input/Output del Mensaje
Section titled “Input/Output del Mensaje”El proceso no recibe mensajes directamente, sino que consulta periódicamente al servicio de logística inversa para obtener los ítems que deben ser cancelados.
Output
Section titled “Output”No hay un output de mensaje específico, pero el worker registra logs detallados de cada operación realizada.
Flujo Paso a Paso
Section titled “Flujo Paso a Paso”-
Inicialización del Cronjob:
const job = new CronJob(appConfig.cron.expression, async () => {// Lógica del cronjob}) -
Ejecución del Contexto Asíncrono:
await AsyncJustoContextStorage.getInstance().run({}, async () => {// Lógica dentro del contexto}) -
Obtención de Ítems Antiguos:
await EitherAsync.fromPromise(service.findMoreThan24h()).onRight((it) => {logger.info({event,msg: `${it.length} reverse logistics items have been received!`,})}) -
Procesamiento de Cada Ítem:
.flatMap(async (items) => {for (const item of items) {/* Cancel reverse logistic item */;(await service.cancel(item)).onRight((it) => {logger.info({event,data: it,msg: `The reverse logistic item with ID ${it.id} has been cancelled!`,})})}return Either.right(items)}) -
Finalización y Registro:
.onRight(() => {logger.info({event,msg: 'All reverse logistic items has been cancelled successful!',})})
Adaptadores y Puertos Involucrados
Section titled “Adaptadores y Puertos Involucrados”Puertos (Interfaces)
Section titled “Puertos (Interfaces)”- ReverseLogisticItem: Interfaz que define la estructura de un ítem de logística inversa.
Adaptadores
Section titled “Adaptadores”- ReverseLogisticsItemService: Adaptador que implementa la comunicación con el servicio externo de logística inversa.
Reglas de Negocio Aplicadas
Section titled “Reglas de Negocio Aplicadas”- Criterio de Antigüedad: Se cancelan los ítems que tienen más de 24 horas desde su creación.
- Procesamiento Secuencial: Los ítems se procesan uno por uno, asegurando que cada cancelación se complete antes de pasar al siguiente ítem.
- Idempotencia: El proceso está diseñado para ser idempotente, lo que significa que puede ejecutarse múltiples veces sin efectos secundarios no deseados.
Errores o Excepciones Posibles
Section titled “Errores o Excepciones Posibles”-
Error de Conexión: Si no se puede establecer conexión con el servicio de logística inversa.
- Manejo: Se registra el error y se marca el cronjob como no saludable.
-
Error en la Respuesta del Servicio: Si el servicio de logística inversa devuelve un error.
- Manejo: Se captura el error, se registra, y se continúa con el siguiente ítem si es posible.
-
Error en la Expresión Cron: Si la expresión cron configurada es inválida.
- Manejo: Se registra el error y no se inicia el cronjob.