project-tu

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.

Відмінності проєктів

ПроєктpartnerIdsCredentials TUЗміни
Golden{ idApi }numeric login + password3
Prime{ idApi }email + password + referral code3
Chathouse{ idApi, externalId?, ulid?, supplyId? }email + password; auth code для operator session3
UdateidApi; ulid у partnerIdsНемає; запити йдуть через suboperator3

Індекси

  • 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.