job-close-operator-task

Прибирання завершених тасків після disconnect

src/golden/workers/bull/queue/jobCloseOperatorTask.queue.ts

Не cron. Викликається програмно через addJobCloseOperatorTasks({operatorFamilyId}) коли оператор відключився від системи. Між постановкою і виконанням — 60 секунд (delay: 60000).

Grace period: якщо за ці 60 секунд оператор повернувся — попередній job стирається (addJobCloseOperatorTasks спочатку видаляє існуючий job з тим самим jobId = operatorFamilyId). Якщо не повернувся — job виконується.

Що відбувається

Послідовно виконує:

  • Через RMQ дозапитує поточний стан оператора (StackOperatorWithFamily.routingKey)
  • Звіряє lastConnectAt і lastDisconnectAt: працює далі тільки якщо lastDisconnect > lastConnect І минуло понад 60 сек після disconnect (інакше тихо done())
  • Бере з golden_task таски оператора, у яких вже проставлено answer або canceled (тобто завершені — або відповіли, або скасували)
  • Для кожного:
    • Якщо dateTimerEnd < now - 60sдодатково проставляє canceled: not_active_by_timer через TaskRepository.setTaskCanceledByTaskId (поверх існуючого статусу)
    • Безумовно видаляє з golden_task (findByIdAndDelete)

Тобто це чистка вже-завершених тасків з активної колекції, а не закриття активних. Стандартно цим займається archive() у update-temp-online; тут — точкова чистка після disconnect-у конкретного оператора.

TODO — навіщо окрема чистка тут, якщо archive() і так пройдеться по них через 10 хв? І навіщо ставити canceled: not_active_by_timer поверх вже існуючих answer/canceled? Уточнити в команді.

Моніторинг

Лише logger.error() через Winston (з повним JSON.stringify({error, data})). StackMonitoring і TG не використовуються.