Task
Поточне зберігання
| Family | Активний таск | Закритий таск |
|---|---|---|
| Golden | golden_task | golden_action_operators.tasks[] |
| Prime | prime_task | prime_action_operators.tasks[] |
| Chathouse | chathouse_tasks | chathouse_action_operators.tasks[] |
| Udate | udate-task | udate_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 }— статистика за типами тасків.