tu-service

TUService

Спільний модуль family-application-api для роботи з FamilyTU.

Задача

  1. Тримати єдине frontend API для списків і partner-профілів TU.
  2. Фільтрувати TU за роллю та доступами користувача.
  3. Призначати й знімати KM, supervisor та operator для однієї або кількох TU.
  4. Тримати спільні правила призначень один раз для всіх Family.
  5. Викликати Family API для partner-операцій і окремі post-effects для ще не перенесених legacy-логік.

API

Поточний API family-application-api:

ОпераціяEndpointСтан
1Запустити refresh TU з partner APIPOST /v2/tus/refresh?family={family}
2Змінити паролі TUPATCH /v2/tus/password
3Призначити або зняти supervisor у змініPATCH /v2/tus/shifts/{shift}/supervisor
4Призначити або зняти operator у змініPATCH /v2/tus/shifts/{shift}/operator
5Список TU за Family і доступами користувачаGET /v2/tus?family={family}
6Одна TUGET /v2/tus/{tuId}

Password request приймає tuIds[]. Assignment request приймає changes[] із tuId, current і candidate, щоб застарілий frontend не перезаписав нове призначення іншого користувача. Batch продовжує обробку після помилки окремої TU та повертає succeeded[]/failed[].

Публічного endpoint для KM немає. Сервісний метод синхронізує clientManagerFamilyId зі Stack TU Card. Системний detach під час refresh знімає лише supervisor/operator і не змінює KM.

POST /v2/tus/refresh отримує типізований Family response, нормалізує його через adapter у family-application-api, порівнює snapshot із family_tus і записує лише фактичні зміни. Зміна пароля викликає Family Admin API.

Stack TU Card

TU Card залишається сутністю Stack і не входить у FamilyTU.profile. FamilyTU.profile містить partner-профіль конкретної TU, а Stack Card — нашу внутрішню картку людини, яка може бути пов’язана з TU різних Family.

Сторінка TU Card отримує пов’язані TU через API TUService. Дані й логіка самої картки залишаються у Stack.

Додаткові операції TU

Поки не виносимо їх в окремі модулі:

ОпераціяДеВласник логіки
Find New — дозвіл TU працювати із sender onlineGoldenFamily TU-операція
MAX profiles per Auth Code і ліміт TU на operatorChathouseFamily settings і перевірка призначення
Доступ operator/teamlead до Client E-mail TUGoldenStack API

Доступ до TU

РольЯкі TU бачить
DirectorУсі доступні TU Family
KMПризначені цьому KM та вільні TU в його адмінках
Top managerTU supervisor/operator зі своєї структури
SupervisorTU, де його supervisorFamilyId стоїть у будь-якій зміні
OperatorTU, де його operatorFamilyId стоїть у будь-якій зміні

Вільна TU у списку KM ще не належить цьому KM. Перед призначенням supervisor KM спочатку має призначити TU собі.

Правила призначень

  1. Supervisor можна призначити лише у вільну або явно передану поточну зміну.
  2. TU має 3 зміни у всіх Family.
  3. Supervisor і TU повинні належати до однієї доступної адмінки.
  4. KM може змінювати supervisor лише коли assignments.clientManagerFamilyId дорівнює Family ID цього KM.
  5. Top manager може призначати лише supervisor зі своєї структури.
  6. Operator призначається в конкретну зміну і повинен належати supervisor цієї зміни.
  7. При знятті supervisor operatorFamilyId у цій самій зміні також очищається.
  8. Зміна перевіряє передані поточні значення і записується атомарно. Застарілий frontend state повертає conflict, а не перезаписує нове призначення.
  9. Після зміни пишеться assignment log. Canonical log collections і поля ще узгоджуються.
  10. Tasks, Electron SET_LADY/DROP_LADY та інші post-effects повинні мати одного owner. До їх перенесення V2 делегує їх legacy Golden через versioned command; після перенесення command вимикається.

Порядок реалізації TU

  1. Family-сервіс отримує типізований partner response для активних адмінок і повертає його без canonical-конвертації.
  2. Family adapter у family-application-api нормалізує response у snapshot.
  3. TUSyncService порівнює snapshot із family_tus; repository записує лише створення та фактичні зміни status/admin/profile.
  4. TUService віддає canonical список нашому frontend після реалізації read endpoint.
  5. Stack синхронізує KM під час зміни зв’язку TU Card.
  6. Director або KM призначає supervisor у конкретну зміну.
  7. Supervisor призначає operator у ту саму зміну.
  8. Frontend та Electron отримують лише TU, доступні поточному користувачу.