Skip to content

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.

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.

No hay un output de mensaje específico, pero el worker registra logs detallados de cada operación realizada.

  1. Inicialización del Cronjob:

    const job = new CronJob(appConfig.cron.expression, async () => {
    // Lógica del cronjob
    })
  2. Ejecución del Contexto Asíncrono:

    await AsyncJustoContextStorage.getInstance().run({}, async () => {
    // Lógica dentro del contexto
    })
  3. Obtención de Ítems Antiguos:

    await EitherAsync.fromPromise(service.findMoreThan24h())
    .onRight((it) => {
    logger.info({
    event,
    msg: `${it.length} reverse logistics items have been received!`,
    })
    })
  4. 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)
    })
  5. Finalización y Registro:

    .onRight(() => {
    logger.info({
    event,
    msg: 'All reverse logistic items has been cancelled successful!',
    })
    })
  • ReverseLogisticItem: Interfaz que define la estructura de un ítem de logística inversa.
  • ReverseLogisticsItemService: Adaptador que implementa la comunicación con el servicio externo de logística inversa.
  1. Criterio de Antigüedad: Se cancelan los ítems que tienen más de 24 horas desde su creación.
  2. Procesamiento Secuencial: Los ítems se procesan uno por uno, asegurando que cada cancelación se complete antes de pasar al siguiente ítem.
  3. Idempotencia: El proceso está diseñado para ser idempotente, lo que significa que puede ejecutarse múltiples veces sin efectos secundarios no deseados.
  1. 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.
  2. 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.
  3. 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.