favorite-service

FavoriteService

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

Задача

  1. Віддавати нашому frontend favorites вибраної TU в одному форматі для всіх Family.
  2. Оновлювати ручні поля favorite з нашого frontend та Electron.
  3. Зберігати автоматичні оновлення favorite від Family-логік та Electron sync.
  4. Віддавати календар New / Unique RU вибраної TU.
  5. Формувати базовий snapshot favorites для Electron startup data.

Frontend API

Робочий список операцій до проєктування Swagger:

ОпераціяEndpoint
1Favorites вибраної TUGET /tus/{tuId}/favorites
2Оновити дані favoritePATCH /favorites/{favoriteId}
3Календар TU за місяцьGET /tus/{tuId}/favorites/calendar?month=YYYY-MM

PATCH /favorites/{favoriteId} змінює type, contacts, isWhite або blockedByTU. blockedByRU змінюється тільки під час Family-синхронізації.

Внутрішні операції

ОпераціяХто використовує
1Favorites усіх TU оператораElectron StartupDataService
2Favorite за парою TU + RUBackend-логіки діалогу, тасків і сендерів
3Upsert автоматичного стануFamilyFavoriteService
4Batch-збереження змін ElectronElectron DataSyncService

Автоматичне оновлення приймає firstPaidAt, lastPaidAt, profit, paidProfit, gifts, isWhite та blockedByRU. Ручне оновлення не може перезаписати новіший автоматичний стан.

Список favorites

  1. Перевірити доступ user до TU через правила TUService.
  2. Прочитати FamilyFavorite за tuId.
  3. Додати профіль і останній online RU з глобальної RU-сутності.
  4. Додати isFreeloader з глобальної RU-логіки.
  5. Порахувати isActive за lastPaidAt і повернути список frontend.

Frontend та Electron отримують одне поле profit. Для Golden і Chathouse це сума витрат, для Prime і Udate — кількість платних вхідних повідомлень.

Календар

  • Unique RU — кількість різних RU з платною дією на цій TU у вибраний день.
  • New RU — кількість RU, для яких цього дня відбулася перша платна дія саме на цій TU.

Джерело платних дій і поточні відмінності описані у FamilyFavoriteService.

Межі

  • Favorites одного RU на різних TU агрегує GlobalFavoriteService.
  • Профіль, name, language та online RU належать глобальній RU-сутності.
  • Нотатки й AI-нотатки належать окремому NotesService.