ProjectTU
Collection project_tus — canonical-документ TU для всіх проєктів. Поточна schema і indexes оголошені в @it-monkeys/backend-common.
Поля
- directorId — scope директора, у якому TU була імпортована або створена.
- project — проєкт, до якого належить TU.
- stackId — legacy-зв’язок зі Stack TU Card; поступово замінюється canonical-зв’язками.
- adminId — ID canonical ProjectAdmin або
nullдля видаленої/неприв’язаної TU. - partnerIds — partner ID у типізованому форматі проєкту;
idApiє основним числовим ID у поточній schema. - credentials.login / credentials.passwordEncrypted — credentials TU там, де вони існують. У звичайні read projections поле
credentialsне входить. - profile — спільні поля профілю: ім’я, вік, avatar та інші поля, потрібні нашому frontend.
- projectData — додаткові поля конкретного проєкту, валідовані його schema.
- status.active / status.deleted — нормалізований стан TU.
- capabilities.canReceiveGifts — спільна capability або
null, якщо проєкт її не надає. - assignments — KM та призначення тімліда/operator за робочими змінами.
- sync.lastListedAt / sync.profileSyncedAt — час останнього успішного оновлення списку і профілю.
Assignments
assignments: {
clientManagerProjectId: string | null;
shifts: Array<{
shift: 1 | 2 | 3;
supervisorProjectId: string | null;
operatorProjectId: string | null;
}>;
}clientManagerProjectId, supervisorProjectId (тімлід зміни) та operatorProjectId — assignment IDs проєкту.
- Кожна TU має три зміни у всіх проєктах.
- Зміни створюються разом із TU і не видаляються та не зміщуються.
shiftунікальний усередині TU. Код знаходить призначення заshift, а не за позицією масиву.operatorProjectIdможе бути заповнений лише разом ізsupervisorProjectIdцієї зміни.- Один
supervisorProjectIdне може займати дві зміни однієї TU. - Призначення виконується атомарно за
TU id + shift + поточне значення. Якщо поточне значення вже змінилось, операція не перезаписує нові дані. - Системне зняття робочих призначень очищає тімліда зміни/operator, але не KM.
clientManagerProjectIdзмінюється лише разом зі зв’язком TU Card.
Assignments зберігаються всередині ProjectTU, без окремої collection.
Відмінності проєктів
| Проєкт | partnerIds | Credentials TU | Зміни |
|---|---|---|---|
| Golden | { idApi } | numeric login + password | 3 |
| Prime | { idApi } | email + password + referral code | 3 |
| Chathouse | { idApi, externalId?, ulid?, supplyId? } | email + password; auth code для operator session | 3 |
| Udate | idApi; ulid у partnerIds | Немає; запити йдуть через suboperator | 3 |
Індекси
- unique
{ directorId: 1, project: 1, "partnerIds.idApi": 1 }— одна TU у scope директора; - partial unique
{ project: 1, "partnerIds.idApi": 1 }дляstatus.deleted: false— одна поточна canonical TU на партнері; { directorId: 1, project: 1, "status.deleted": 1 }— списки TU директора;{ adminId: 1, "status.deleted": 1 }— списки та sync у межах адмін панелі;{ "assignments.clientManagerProjectId": 1, "status.deleted": 1 }— TU конкретного KM;{ "assignments.shifts.supervisorProjectId": 1, "status.deleted": 1 }— TU конкретного тімліда зміни;{ "assignments.shifts.operatorProjectId": 1, "status.deleted": 1 }— TU конкретного operator.