Skip to content

Prod: add project analytics attention and cases - #738

Merged
TThanos3000 merged 1 commit into
masterfrom
prod/project-analytics-attention-cases
Sep 10, 2026
Merged

TThanos3000 merged 1 commit into
masterfrom
prod/project-analytics-attention-cases

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

Что сделано

Semantic production port DEV #725, #726 и #730 в существующий legacy namespace /project-analytics/.

Base: f300e3dcb96672260ace6c555f363afd043f0f46 (актуальный origin/master после #737).
Final head: c3827aa06f58bf7d2b87e20a3079822eaa1e342f.

Добавлены read-only endpoints:

  • GET /programs/<program_id>/project-analytics/participants-without-team/
  • GET /programs/<program_id>/project-analytics/projects-awaiting-evaluation/
  • GET /programs/<program_id>/project-analytics/projects-not-submitted/

Overview GET /programs/<program_id>/project-analytics/ дополнен полями attention.projects_not_submitted и top-level cases. Production /manager-overview/ не менялся.

Семантика

  • Все drilldown endpoints используют production stack ProgramPermissionMixin + IsAuthenticated + IsAdminOrManagerOfProgram и поддерживают только чтение.
  • Общая limit/offset pagination: limit=25, диапазон 1..100, offset>=0; search обрезается и применяется в SQL до count/page.
  • Участник без команды определяется только через leader/Collaborator проекта, связанного с текущей программой; profile.project, production Team/TeamMember и другие программы не участвуют.
  • Distributed attention переиспользует общий annotated queryset из Prod: add project analytics assignment drilldowns #737. Assignment list и attention используют одну completion-семантику: submitted link, непустой набор критериев и оценки назначенного эксперта по всем критериям текущей программы.
  • Not-submitted использует raw PartnerProgramProject.submitted=false; detail применим только к competitive programs. Deadline/open берутся из существующих методов программы. Raw solution_funnel не меняется.
  • Case identity определяется только существующим get_program_case_field() (name="case"). Сохраняются порядок options и нулевые строки; missing/blank/whitespace/obsolete values попадают в without_case.
  • Case project unit — current-program PartnerProgramProject; submitted/not_submitted берутся из raw link flag. Участники — уникальные зарегистрированные leader/Collaborator внутри bucket.
  • Проверена reconciliation: сумма case buckets совпадает с solution_funnel.created/submitted/not_submitted.
  • Multi-program данные изолированы по link/program/criteria/assignment/score/case value.
  • Production Application/Team/Submission/SubmissionExpertAssignment/Evaluation не влияют на legacy analytics, и legacy данные не влияют на production APIs.
  • Explicit allow-list serializers не выполняют SQL и не раскрывают приватные поля.

SQL impact

  • Overview до B6b: 10 HTTP / 8 service SELECTs.
  • Overview после B6b: 14 HTTP / 12 service SELECTs.
  • Ровно +4 bounded case queries: definition, grouped links, registered leaders, registered collaborators.
  • Каждый новый detail endpoint: fixed 4 manager-request queries для 1 и 31 rows; N+1 нет.

Проверки

Exact final head: c3827aa06f58bf7d2b87e20a3079822eaa1e342f.

Локально, Python 3.11 + PostgreSQL:

  • B5/B6a/B6b targeted: 97/97 — OK.
  • partner_programs + project_rates + projects: 929/929 — OK.
  • Full backend suite: 1477/1478; единственное unrelated падение feed.tests.test_feed_api.FeedAPITests.test_feed_returns_project_news_as_news_content из-за недетерминированного порядка двух feed-записей с близким timestamp. Изолированный повтор этого теста — OK; файлы feed не изменялись. Оба Linux CI ниже прошли полный набор 1478/1478.
  • scoped Black — OK (12 Python files).
  • full Flake8 — OK.
  • manage.py check — OK.
  • manage.py check --tag models — OK.
  • makemigrations --check --dry-runNo changes detected.
  • git diff --check origin/master...HEAD — OK.

GitHub Actions:

  • Ordinary CI: Lint — success; Tests — 1478/1478, OK (skipped=5), 1283.050s — success (run).
  • Backend PostgreSQL CI: connection/check/models/migrations — success; locking and constraints — 86/86, 15.999s; full backend — 1478/1478, 496.261s — success (run).

Scope

Нет новых models/migrations/endpoints вне перечисленных, нет scoring writes или lifecycle/deadline изменений. Не менялись production manager analytics, Angular, React, зависимости, Docker, workflows и deploy-конфигурация.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 10, 2026 09:23
@TThanos3000
TThanos3000 merged commit 6e4bb56 into master Sep 10, 2026
6 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.

2 participants