dashboard-service

DashboardService

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

Задача

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

API

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

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

Доступ

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

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

№ГрафікДжерело
1Balance per weekProjectStatisticsRelation
2Types of balanceProjectStatisticsRelation.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; інші проєкти — Online
Unique RU per weekChathouse додатково повертає RU payers
Types of balanceНабір series визначається ProjectStatisticsRelation.breakdown конкретного проєкту
Created ChatsЄ лише у Prime
Partner online GoldenTotal TU, Our TU, Total RU, середні значення та погодинний drilldown

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

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

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

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

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

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

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

Не закрито

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