Skip to content

prod(analytics): case drilldown API и scoped XLSX - #761

Merged
TThanos3000 merged 2 commits into
masterfrom
release/prod-analytics-case-drilldown
Sep 28, 2026
Merged

TThanos3000 merged 2 commits into
masterfrom
release/prod-analytics-case-drilldown

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Что изменено

Выборочный production-перенос принятого на DEV PR #760: manager case drilldown list и XLSX в существующих /programs/{id}/projects/ и /export-projects/.

Зачем

Подготовить backend для утверждённого Angular drilldown без переноса остальных изменений dev. DEV acceptance подтверждён пользователем.

Реализация

Ветка создана от актуального origin/master: 7b2918ed3d4914e50a5a5fc684706044ba7f5c06. Сопоставлены production-вариант 608bf09 и финальный DEV 2603312; merge/cherry-pick merge commit из dev не выполнялся.

Сохранены production-модули project_case_analytics, project_analytics_attention, ProjectAnalyticsAttentionPagination и /project-analytics/. Перенесено усиленное независимое assertion заголовков XLSX из финального DEV.

Файлы:

  • partner_programs/serializers/project_case_drilldown.py
  • partner_programs/services/project_case_drilldown.py
  • partner_programs/services/project_case_analytics.py
  • partner_programs/services/exports.py
  • partner_programs/views.py
  • partner_programs/tests/test_project_case_drilldown.py
  • docs/analytics-case-drilldown-api.md

API

Opt-in view=case_analytics, обязательный case_scope=all|selected|without_case; selected требует точный текущий case_name. List: поиск по названию, limit 1–100, offset ≥0. Export: полный bucket; search/pagination/неизвестные и неоднозначные параметры дают 400, без fallback на all.

Единый classifier для overview/list/export, данные связи выбранной программы, Project.presentation_address, bounded SQL. XLSX содержит колонку «Кейс», даты и полную ссылку; пользовательские строки сохраняются literal cells. Legacy list/filter/all/submitted/rates exports сохраняются. Новых endpoints/models/migrations нет.

UI

Не менялся. Связанный Angular production PR #391 мержится после backend deploy/API smoke. Удаление общей кнопки Cases не удаляет API case_scope=all.

Permissions

Сохранены server-side IsAdminOrManagerOfProgram и дополнительная проверка export. Manager выбранной программы/staff/superuser имеют прежний API-доступ; остальные роли отклоняются. Staff UI gate не расширяется.

Проверки

  • Checked by source: полный selective diff, production URLs/permissions, отсутствие изменений workflow/models/migrations, git diff --check.
  • Targeted: 13 tests PASS, PostgreSQL 18 / Python 3.11; permission matrix, multi-program, classifier, validation, XLSX literal values/filename, legacy compatibility, no writes и query count 1/100 строк.
  • Regression: 115 tests PASS с NEXTGEN_SURFACE_ENABLED=True, как в штатном full CI. Первый запуск с False дал 6 NoReverseMatch в isolation-тестах nextgen; код не менялся, окружение исправлено.
  • manage.py check, makemigrations --check --dry-run, flake8 . — PASS; новых migrations не обнаружено.
  • PostgreSQL 15 CI: 1630 tests, OK (skipped=3), 603.758 s, exit 0. Django/model/migration checks, clean DB migrate, production quarantine, locking/constraints и очистка test DB — PASS на HEAD 8e1c438d5f572d9058fd87a23aa274d20d368a5e.
  • Стандартный CI: 1630 tests, OK (skipped=9), 1710.411 s; lint и production quarantine — PASS, exit 0 на финальном HEAD.
  • Автоматический PostgreSQL PR CI: 1630 tests, OK (skipped=3), 647.932 s; 86 locking/constraint tests, quarantine, Django/model/migration checks, migrate, lint/format и cleanup — PASS, exit 0 на финальном HEAD.

Локальный полный PostgreSQL 18 suite: 1630 tests, OK (skipped=3), 748.931 s.
После успешных assertions локальная команда без --keepdb получила exit 1 на DROP test database:
21 оставшееся соединение. Это не выдаётся за clean command run. Runtime/tests ради cleanup не менялись;
штатный PostgreSQL CI использует --keepdb и явный cleanup. Изолированный локальный PostgreSQL остановлен.

Review по procollab-review: BLOCKER/MAJOR/MINOR в итоговом diff не выявлены. Производственные имена модулей и pagination сохранены; исправлено форматирование документации. Продуктовые решения не менялись.

Acceptance criteria

  • Selected/without_case/all, missing/blank/whitespace/obsolete/nonexact и реальный option «Без выбранного кейса» — feature tests.
  • Project × Program isolation для case/submitted/дат — feature tests.
  • List search/pagination и полный export без search/page — feature tests.
  • Server-side permissions, null/URL презентации и legacy response/export — feature + regression tests.
  • XLSX headers, строки, даты, URL, пустой workbook, =/+/-/@/#N/A как literal text и filename — workbook assertions.
  • Overview 4 SQL при 1/100 строках; list/export имеют постоянное число запросов (≤10/≤7), сериализация без SQL; feature не пишет данные — query assertions.

Не проверено

Живые production API/admin/Celery и smoke после выкладки: выполняются пользователем после release. Локальные проверки используют отдельную test PostgreSQL, рабочие БД не затронуты.

Риски / migration

Schema/data migration не требуется. Backend совместим со старым Angular. Сначала merge этого PR и backend Release Prod, затем API smoke, затем Angular merge (push в master автоматически запускает frontend deploy).

Rollback: вернуть предыдущий backend release; схема не менялась. Если Angular уже выпущен, откатить Angular первым либо принять временную недоступность case drilldown. Merge/release/deploy Codex не выполнял.

@TThanos3000
TThanos3000 merged commit e54545e into master Sep 28, 2026
7 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