favorites

Favorites (per TU)

src/features/favorites/by_tu/ — єдиний TU-centric модуль для operator, team_lead і top_manager у Family udate, prime/Talkytimes, chathouse та golden.

Фіча входить до спільного домену:

src/features/favorites/
├── by_tu/
├── global/
└── shared/

by_tu і global мають окремі controllers та UI, але перевикористовують спільні API helpers, notes, select/contact modal, dates, sorting і request guards. Legacy-реалізацій favorites_men у role-папках більше немає.

Суть

Для вибраної TU показуються її RU-фаворити та календар активності за місяць. По кожному RU користувач бачить або редагує доступні для ролі й Family поля: тип, black list, контакти, ім’я та нотатку. Active Favorite — активний зв’язок TU ↔ RU; правило підсвічування залежить від Family.

Use cases

  • operator переглядає RU-фаворитів власної TU та оновлює доступні робочі поля;
  • team lead / top manager аналізує RU-фаворитів підлеглих TU, календар активності й доступні керівній ролі поля.

Доступи

  • operator — власні TU;
  • team_lead — дерево operator → TU;
  • top_manager — дерево team lead → operator → TU.

Routes збережені:

  • /operator/favorites_ru;
  • /teamlead/{family}/favorites_ru;
  • /top_manager/{family}/favorites_ru.

Route/UI назва talkytimes на domain boundary мапиться на prime. Backend ID конкретної Family ізольовані в adapters і не проходять у компоненти як умовна бізнес-логіка.

Архітектура

  • Index.js — feature entry point;
  • useFavoritesByTu.js — orchestration, request gates, partial loading і mutation locks;
  • adapters.js — endpoints, payloads, runtime normalization та family-specific IDs;
  • capabilities.js — права ролей;
  • config.js — колонки та декларативні UI-відмінності;
  • components/ — одне дерево TU, календар, таблиця й notes modal;
  • favorites_by_tu.module.scssєдиний SCSS module для всіх Family та ролей.

Family/role-відмінності стилів задаються semantic root classes, а не дванадцятьма копіями SCSS.

Що бачимо

Зліва — доступне дерево TU. Праворуч після вибору TU незалежно завантажуються:

  • список RU-фаворитів;
  • календар вибраного місяця.

Якщо один із запитів падає, успішна частина залишається доступною. Пізня відповідь попередньо вибраної TU або місяця не перезаписує актуальний стан.

Календар

  • Days — дні місяця;
  • Unique RU — унікальні RU за день;
  • New RU — нові RU за день;
  • day-off підсвічується лише у варіантах, де це передбачено поточним UI.

Таблиця

КолонкаGoldenPrimeUdateChathouse
ID
S
Name
Start / Last / Last online
Type
Gifts
Contacts
Black list
Blocked
Profit
Messages
Info

Редагування дозволене лише коли relation містить реальний server ID. Synthetic UI ID ніколи не надсилається в update endpoint.

Для operator колонка Contacts є read-only у всіх Family. Team lead і top manager можуть редагувати Contacts.

Golden history links показуються лише коли є обидва необхідні backend identifiers. Contacts = Yes у Golden вимагає валідний e-mail.

Нотатки

Manual notes можна:

  • завантажувати;
  • створювати;
  • приховувати й повертати у список;
  • редагувати title конкретного зв’язку TU ↔ RU.

AI notes у Favorites лише read-only для всіх Family і ролей. У фічі немає approve/reject, review modal, moderation capability або review API call.

Якщо backend уже повернув moderation result, він використовується тільки для кольору:

  • approved — зелений;
  • rejected — червоний;
  • відсутній/невідомий статус — нейтральний.

Manual й AI notes завантажуються незалежно: помилка одного запиту не видаляє успішний результат іншого.

API

Family-specific payloads залишаються в adapters:

  • Udate — ladyUlid;
  • Prime/Golden — ladyId_api;
  • Chathouse — ladyDbId.

Усі Favorites-specific endpoint constants належать src/features/favorites/endpoints.js. Legacy utility-файлів src/utils/favoritesMenData.js і src/utils/globalFavoritesData.js більше немає; backend-owned назви endpoint та payload fields збережені без змін.

Зв’язки