dashboard-service

DashboardService

Спільний модуль family-application-api для тижневих графіків Dashboard. Повертає один формат для всіх Family незалежно від того, чи конкретний блок рахується напряму, чи читається з готової projection.

Задача

  1. Повернути 26 завершених тижнів для вибраної Family та доступного user scope.
  2. Віддати всі графіки одним невеликим response.
  3. Однаково застосувати рольові доступи та фільтри supervisor/operator.

API

ОпераціяEndpoint
1Дані всіх графіківPOST /dashboard
2Supervisor/operator, доступні у вибраному періодіPOST /dashboard/scope-options
3Погодинний online для вибраного тижняPOST /dashboard/online-by-hour

POST /dashboard приймає family, endDate неділі та необов’язкові supervisorFamilyId і operatorFamilyId. Роль і доступний scope визначаються з user token.

Доступ

  • director — уся Family або один supervisor;
  • top manager — власний scope, supervisor або operator у ньому;
  • supervisor — власна команда або один її operator;
  • operator — лише власний scope;
  • HR і client manager — без Dashboard.

Графіки та джерела

ГрафікДжерело
1Balance per weekFamilyStatisticsRelation
2Types of balanceFamilyStatisticsRelation.breakdown
3Online per weekOperatorOnlineSession
4Unique RU per weekісторія платної активності favorites
5Tasks per weekTask
6% of task processingTask.result: closedOnTime, closedOutTime, closedBySystem
7Average tasks processing speedTask.createdAt і час відповіді
8Quantity of sending messagesOperatorAction та результати Electron sender
9Workspace TU onlineTUWorkspaceOnlineSession

Розрахунок тасків використовує ті самі категорії, що й AnalyticsService.

Додаткові дані

ДаніGoldenPrimeChathouseUdate
Created Chats
Повний partner online TU/RU
Workspace TU online

Повний partner online читається через PartnerOnlineHistoryService тільки для coverage = partner. Частковий snapshot активних TU не показується як online усього партнера.

Відмінності графіків

ГрафікВідмінність
Online per weekGolden повертає Online і Sleep; інші Family — Online
Unique RU per weekChathouse додатково повертає RU payers
Types of balanceНабір series визначається FamilyStatisticsRelation.breakdown конкретної Family
Created ChatsЄ лише у Prime
Partner online GoldenTotal TU, Our TU, Total RU, середні значення та погодинний drilldown

Це один контракт Dashboard із Family-specific series, а не окремі сервіси. Точні DTO series фіксуємо під час реалізації endpoint-а.

Зберігання й розрахунок

Зараз Dashboard використовує змішаний підхід:

  • balance, типи балансу й частина online рахуються під час запиту;
  • task-метрики зберігаються у тижневих *_task_dashboards;
  • Unique/New RU у Family отримуються по-різному: напряму або з окремих тижневих collections;
  • Golden partner online читається з готового тижневого агрегату.

Спільну FamilyDashboardWeek поки не фіксуємо. Для кожного блоку окремо треба визначити:

  1. чи достатньо прямого aggregate-запиту до canonical collection;
  2. чи потрібна окрема materialized projection або ClickHouse;
  3. коли й чим вона перераховується після звичайного sync та backfill.

Frontend API від цього рішення не змінюється: DashboardService збирає готовий response з обраних джерел.

Не закрито

  • Для Unique RU per week потрібне збереження історії платних дій, яке вже позначене в FamilyFavorite. firstPaidAt/lastPaidAt недостатньо для повного історичного rebuild.
  • Поточний графік Average TU balance використовує старі level/historyLevel. У новий Dashboard він не входить, доки не буде визначена нова сегментація TU.
  • Для automatic sending потрібна спільна server-collection результатів Electron sender.