project-statistics-service

ProjectStatisticsService

Сервіс вигрузки статистики та конвертації у ProjectStatisticsRelation.

Задача

  1. Отримати статистику кожної активної адмін панелі через Project Statistics API.
  2. Прив’язати partner TU до нашої TU.
  3. Прив’язати суму до operator, тімліда і client manager. TODO: додати прив’язку до top manager.
  4. Зберегти оперативну або денну статистику.
  5. Оновити ProjectStatisticsRelation для нашого frontend та аналітики.

Поточний flow

  1. Для кожної адмін панелі визначається період від останнього збереженого дня до вчора.
  2. Partner response зберігається у форматі конкретного проєкту.
  3. TU визначається за partner ID.
  4. Operator і тімлід визначаються за даними partner API та нашими логами призначень і логінів.
  5. Дані конвертуються у денні ProjectStatisticsRelation.

Спільний результат

Зараз кожен проєкт має окрему collection *_statistics_relations, але базовий формат уже однаковий. Ціль конвертації — спільна collection ProjectStatisticsRelation.

ПолеGoldenPrimeChathouseUdate
date✅✅✅✅
ladyId✅✅✅✅
cmId✅✅✅✅
supervisorId✅✅✅✅
operatorId✅✅✅✅
isActive, isDeleted✅✅✅✅
sum✅✅✅✅
final✅✅✅—
bonuses[] з RU і типом✅—✅—
topManagerId————

Для цільового breakdown Golden і Chathouse використовують типи з основної вигрузки. ProjectStatisticsService має додати до основної статистики результати окремих type-запитів Prime та Udate.

Поточний Prime type-worker зберігає тільки тижневу розбивку всієї agency. Для ProjectStatisticsRelation потрібен денний результат за типом і TU.

Поточна Udate type-statistics зберігає розбивку за operator. Для розбивки конкретної TU потрібні запити ladyId + type.

Прив’язка даних

ПроєктTUOperator і тімлід
GoldenladyID → id_api TUОперація потрапляє у часовий період між логами login/set/off operator.
PrimeidTrustedUser → prime_id TUБереться останній login operator за день; якщо логів немає — попередній денний запис.
Chathousetrusted_user_id → profile.id TUauth_code → наш user → operator проєкту; зміни призначень уточнюються логами.
UdateЗапит виконується по profile.ulid TUtranslator legacyId → suboperator → operator проєкту; тімлід береться з призначення operator.

Client manager, активність TU та зміни призначень беруться з наших поточних даних і логів за відповідний день.

Поточні collections

ПроєктОперативнаДеннаПроєкція
Goldengolden_temp_statisticsgolden_statisticgolden_statistics_relations
Primeprime_temp_statisticsprime_statisticsprime_statistics_relations
Chathousechathouse_temp_statisticschathouse_statisticschathouse_statistics_relations
Udateudate_today_operator_statisticsudate_operator_statistics, udate_history_statistic, udate_type_statisticsudate_statistics_relations

Нюанси

  • Golden і Chathouse зберігають окремі операції та можуть прив’язувати статистику до RU.
  • Prime отримує тільки денну суму за TU.
  • Udate окремо завантажує суми за operator, за TU та за типами. Реалізація живе у stack, а partner GraphQL-запити виконує stack-udate.
  • Невідомий Chathouse auth_code не прив’язується до operator. Невідомий Udate translator потрапляє у FREE для operator-агрегату.