FamilyTU
Collection family_tus — canonical-документ TU для всіх Family. Поточна schema і indexes оголошені в @it-monkeys/backend-common.
Поля
- directorId — scope директора, у якому TU була імпортована або створена.
- family — Family, до якої належить TU.
- stackId — legacy-зв’язок зі Stack TU Card; поступово замінюється canonical-зв’язками.
- adminId — ID canonical FamilyAdmin або
nullдля видаленої/неприв’язаної TU. - partnerIds — partner ID у типізованому форматі Family;
idApiє основним числовим ID у поточній schema. - credentials.login / credentials.passwordEncrypted — credentials TU там, де вони існують. У звичайні read projections поле
credentialsне входить. - profile — спільні поля профілю: ім’я, вік, avatar та інші поля, потрібні нашому frontend.
- familyData — додаткові поля конкретної Family, валідовані її schema.
- status.active / status.deleted — нормалізований стан TU.
- capabilities.canReceiveGifts — спільна capability або
null, якщо Family її не надає. - assignments — KM та призначення supervisor/operator за робочими змінами.
- sync.lastListedAt / sync.profileSyncedAt — час останнього успішного оновлення списку і профілю.
Assignments
assignments: {
clientManagerFamilyId: string | null;
shifts: Array<{
shift: 1 | 2 | 3;
supervisorFamilyId: string | null;
operatorFamilyId: string | null;
}>;
}clientManagerFamilyId, supervisorFamilyId та operatorFamilyId — Family assignment IDs.
- Кожна TU має три зміни у всіх Family.
- Зміни створюються разом із TU і не видаляються та не зміщуються.
shiftунікальний усередині TU. Код знаходить призначення заshift, а не за позицією масиву.operatorFamilyIdможе бути заповнений лише разом ізsupervisorFamilyIdцієї зміни.- Один
supervisorFamilyIdне може займати дві зміни однієї TU. - Призначення виконується атомарно за
TU id + shift + поточне значення. Якщо поточне значення вже змінилось, операція не перезаписує нові дані. - Системне зняття робочих призначень очищає supervisor/operator, але не KM.
clientManagerFamilyIdзмінюється лише разом зі зв’язком TU Card.
Assignments зберігаються всередині FamilyTU, без окремої collection.
Відмінності Family
| Family | 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, family: 1, "partnerIds.idApi": 1 }— одна TU у scope директора; - partial unique
{ family: 1, "partnerIds.idApi": 1 }дляstatus.deleted: false— одна поточна canonical TU на партнері; { directorId: 1, family: 1, "status.deleted": 1 }— списки TU директора;{ adminId: 1, "status.deleted": 1 }— списки та sync у межах адмінки;{ "assignments.clientManagerFamilyId": 1, "status.deleted": 1 }— TU конкретного KM;{ "assignments.shifts.supervisorFamilyId": 1, "status.deleted": 1 }— TU конкретного supervisor;{ "assignments.shifts.operatorFamilyId": 1, "status.deleted": 1 }— TU конкретного operator.