task

Task

Поточне зберігання

FamilyАктивний таскЗакритий таск
Goldengolden_taskgolden_action_operators.tasks[]
Primeprime_taskprime_action_operators.tasks[]
Chathousechathouse_taskschathouse_action_operators.tasks[]
Udateudate-taskudate_action_operators.tasks[]

В active collection лежить повний документ таска. Після answer або cancel з нього вибирається скорочений набір полів, який додається в денний документ оператора в *_action_operators; початковий active-документ видаляється.

У Golden також залишився проміжний golden_task_archive: worker переносить туди закриті таски, які залишилися в golden_task, а окрема конвертація переносить їх у golden_action_operators.tasks[]. Звичайний answer/cancel уже пише одразу в golden_action_operators.

Спільна collection

collection tasks (робоча назва) — один документ таска на весь його lifecycle. Після закриття документ не переноситься в іншу collection і не вкладається в денний документ оператора.

Поля

  • family — Family таска.
  • taskKey — idempotency key створення, унікальний у межах Family.
  • type — спільний тип таска.
  • tuId — посилання на FamilyTU.
  • ruExternalId — ID RU на партнері.
  • operatorFamilyId — operator, якому належав таск під час створення.
  • supervisorFamilyId — supervisor оператора під час створення.
  • source.type — джерело кандидата: socket, unanswered, RU online, follow-up або інша логіка Electron.
  • source.id — ID partner-події або попереднього таска, якщо він є.
  • createdAt — час створення.
  • expiresAt — дедлайн відповіді, якщо таск має таймер.
  • result — відсутній для активного таска; після закриття містить результат.
result:
  | {
      type: "answered";
      at: number;
      actionType?: string;
      length?: number;
    }
  | {
      type: "canceled";
      at: number;
      reason: string;
    };

Назва, колір і тривалість таймера визначаються за type у Electron та не дублюються в Task. Повні snapshots TU, RU і dialog також не зберігаються: Task містить лише посилання та дані, потрібні для lifecycle й історії.

Індекси

  • unique { family: 1, taskKey: 1 } — повторний create не створює дублікат;
  • partial { family: 1, operatorFamilyId: 1, createdAt: 1 }, де result відсутній — активні таски оператора;
  • { family: 1, operatorFamilyId: 1, "result.at": -1 } — історія оператора;
  • { family: 1, tuId: 1, ruExternalId: 1, createdAt: -1 } — історія пари TU + RU;
  • { family: 1, type: 1, createdAt: 1 } — статистика за типами тасків.