DashboardService
Спільний модуль family-application-api для тижневих графіків Dashboard. Повертає один формат для всіх Family незалежно від того, чи конкретний блок рахується напряму, чи читається з готової projection.
Задача
- Повернути 26 завершених тижнів для вибраної Family та доступного user scope.
- Віддати всі графіки одним невеликим response.
- Однаково застосувати рольові доступи та фільтри supervisor/operator.
API
| № | Операція | Endpoint |
|---|---|---|
| 1 | Дані всіх графіків | POST /dashboard |
| 2 | Supervisor/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.
Графіки та джерела
| № | Графік | Джерело |
|---|---|---|
| 1 | Balance per week | FamilyStatisticsRelation |
| 2 | Types of balance | FamilyStatisticsRelation.breakdown |
| 3 | Online per week | OperatorOnlineSession |
| 4 | Unique RU per week | історія платної активності favorites |
| 5 | Tasks per week | Task |
| 6 | % of task processing | Task.result: closedOnTime, closedOutTime, closedBySystem |
| 7 | Average tasks processing speed | Task.createdAt і час відповіді |
| 8 | Quantity of sending messages | OperatorAction та результати Electron sender |
| 9 | Workspace TU online | TUWorkspaceOnlineSession |
Розрахунок тасків використовує ті самі категорії, що й AnalyticsService.
Додаткові дані
| Дані | Golden | Prime | Chathouse | Udate |
|---|---|---|---|---|
| Created Chats | — | ✅ | — | — |
| Повний partner online TU/RU | ✅ | — | — | — |
| Workspace TU online | ✅ | ✅ | ✅ | ✅ |
Повний partner online читається через PartnerOnlineHistoryService тільки для coverage = partner. Частковий snapshot активних TU не показується як online усього партнера.
Відмінності графіків
| Графік | Відмінність |
|---|---|
| Online per week | Golden повертає Online і Sleep; інші Family — Online |
| Unique RU per week | Chathouse додатково повертає RU payers |
| Types of balance | Набір series визначається FamilyStatisticsRelation.breakdown конкретної Family |
| Created Chats | Є лише у Prime |
| Partner online Golden | Total 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 поки не фіксуємо. Для кожного блоку окремо треба визначити:
- чи достатньо прямого aggregate-запиту до canonical collection;
- чи потрібна окрема materialized projection або ClickHouse;
- коли й чим вона перераховується після звичайного 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.