family-statistics-service

FamilyStatisticsService

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

Задача

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

Поточний flow

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

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

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

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

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

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

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

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

FamilyTUOperator і supervisor
GoldenladyIDid_api TUОперація потрапляє у часовий період між логами login/set/off operator.
PrimeidTrustedUserprime_id TUБереться останній login operator за день; якщо логів немає — попередній денний запис.
Chathousetrusted_user_idprofile.id TUauth_code → наш user → Family operator; зміни призначень уточнюються логами.
UdateЗапит виконується по profile.ulid TUtranslator legacyId → suboperator → Family operator; supervisor береться з призначення operator.

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

Поточні collections

FamilyОперативнаДеннаПроєкція
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-агрегату.