Skip to content

DEV: add program manager analytics API - #721

Merged
TThanos3000 merged 2 commits into
devfrom
feature/dev-program-manager-analytics
Aug 31, 2026
Merged

DEV: add program manager analytics API#721
TThanos3000 merged 2 commits into
devfrom
feature/dev-program-manager-analytics

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Цель

Добавляет manager-only источник данных для Angular Program Analytics PR #314:

GET /programs/<program_id>/manager-overview/

Реальная модель данных

  • регистрация: PartnerProgramUserProfile;
  • решение программы: PartnerProgramProject;
  • команда: руководитель или Collaborator связанного проекта;
  • сдача: PartnerProgramProject.submitted/datetime_submitted;
  • эксперты программы: authoritative M2M Expert.programs;
  • назначения: ProjectExpertAssignment;
  • оценки: ProjectScore по критериям текущей программы;
  • регионы: непустой Project.region.

Evaluation semantics

max_project_rates возвращается как nullable max_evaluations_per_project. Это только верхний лимит числа оценивающих экспертов, не required target.

Open mode

Для сданного проекта первая оценка любого уникального эксперта программы означает evaluated. До первой оценки проект имеет awaiting_evaluation. Assignments в этом режиме не являются обязательным источником статуса.

Distributed mode

Статус строится по реальным назначениям:

  • нет назначений либо ни одно назначение не выполнено — awaiting_evaluation;
  • выполнена часть назначений — partially_evaluated;
  • выполнены все назначения — evaluated.

Assignment выполнен только при наличии ProjectScore назначенного эксперта для этого проекта и программы. solution_funnel.evaluated использует ту же семантику. projects_awaiting_evaluation в distributed mode включает awaiting + partial, в open mode — только проекты без первой оценки.

Остальные метрики

Ответ разделён на summary, participant_funnel, solution_funnel, evaluation_status, attention и непрерывный 30-дневный activity.

  • Участники считаются как distinct non-null user ID.
  • summary.experts.total считает unique Expert через Expert.programs, даже без assignments.
  • Регионы нормализуются trim и возвращаются с breakdown.
  • participants_without_team считается по реальным leader/collaborator relations.
  • Все запросы bounded; regression подтверждает неизменное число SQL-запросов при росте данных.

Отдельной authoritative сущности «кейс» в current dev нет. Произвольный PartnerProgramField не является системной связью, поэтому fake cases не добавлялись. Ограничение и возможная минимальная модель описаны в документации.

Доступ

  • manager программы, staff, superuser: 200;
  • обычный участник: 403;
  • anonymous: 401;
  • неизвестная программа: 404.

Проверки

  • Analytics regressions: 16/16 passed as part of PostgreSQL suite.
  • Backend PostgreSQL CI: passed, 573/573 tests.
  • PostgreSQL vendor и select_for_update: confirmed.
  • Миграции применены на пустую PostgreSQL 15 DB: passed.
  • Standard CI tests: passed, 568 tests, 1 existing skip.
  • CI Lint: passed.
  • Black changed Python files: passed.
  • Flake8 changed Python files: passed.
  • manage.py check: passed.
  • makemigrations --check --dry-run: no changes detected.
  • git diff --check: passed.

Локальный Windows host не содержит системную DLL WeasyPrint и PostgreSQL; SQLite не использовался как замена. Полная проверка выполнена штатным Linux/PostgreSQL workflow.

Scope

Frontend, React, vacancy, CV, workflows, deploy и Docker не изменялись. Миграции не добавлены.

@TThanos3000
TThanos3000 marked this pull request as ready for review August 31, 2026 19:44
@TThanos3000
TThanos3000 merged commit 41a9747 into dev Aug 31, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant