Skip to content

DEV: детализация блока «Требует внимания» — API - #725

Merged
TThanos3000 merged 1 commit into
devfrom
feature/dev-program-attention-drilldown-api
Sep 5, 2026
Merged

DEV: детализация блока «Требует внимания» — API#725
TThanos3000 merged 1 commit into
devfrom
feature/dev-program-attention-drilldown-api

Conversation

@TThanos3000

Copy link
Copy Markdown
Collaborator

Результат

Backend-only v1 детализации двух существующих показателей «Требует внимания».
Angular сейчас не реализуется. После создания этого Draft PR работа останавливается.

  • GET /programs/<program_id>/manager-overview/participants-without-team/
  • GET /programs/<program_id>/manager-overview/projects-awaiting-evaluation/

Оба endpoint только для чтения: manager указанной программы / staff / superuser,
через существующий can_manage_program; anonymous 401, нет доступа 403,
неизвестная программа 404, изменяющие методы 405.

Аудит и семантика

  • Участник — уникальный ненулевой PartnerProgramUserProfile.user_id. Команда —
    руководитель либо Collaborator проекта текущей программы; команда другой
    программы не исключает. profile.project не используется как доказательство.
  • Первая дата регистрации — MIN(datetime_created) именно текущей программы.
    В схеме уже есть unique(user, program): дубли запрещены БД, ограничение сохранено;
    группировка защищает единственность строки без изменения схемы.
  • Работа — сданная связь PartnerProgramProject, не назначение. Несданные и
    not_ready не входят. В distributed включены отсутствие назначений, отсутствие
    завершённых экспертов и частичное завершение; все назначения завершены — исключение.
  • Завершение назначения: сдача и все критерии этой программы, критериев > 0.
    В open сохранена первая оценка по критерию программы; прогресс назначений — null.
    max_project_rates не используется как обязательное число оценок.
  • Списки и overview опираются на общие предикаты: _participant_profiles /
    _without_team_filter, _solution_rows, annotated_assignment_queryset.is_completed.
    Контракты overview / assignments / scores и SLA задержек не меняются.

Контракт и безопасность

Обёртка count, next, previous, results; для работ также mode.
Параметры: limit=25 (1–100), offset=0 (>=0), search по имени/названию.
Некорректная пагинация — 400. Trimmed search применяется в SQL до count и пагинации.
Без поиска count совпадает с соответствующей метрикой overview на неизменных данных.

Сортировка: участники — первая регистрация + user_id; работы — дата сдачи
(неизвестная последней) + ID связи. Имена, аватары и city — только явный allow-list;
email, телефон, auth, анкеты не раскрываются. Неизвестная дата сдачи остаётся null.
Пустое имя — «Участник №ID». Project.leader в текущей БД NOT NULL; defensive
контракт leader=null проверен отдельно на уровне serializer без изменения схемы.

Причины: «Эксперты не назначены», «Нет завершённых оценок», «Частично оценено»,
«Ожидает первой оценки». Отсутствие завершения не названо отсутствием начала.

Полные JSON-примеры, источники, правила, ограничения и параметры:
docs/program-manager-analytics-api.md. Новые функции имеют содержательные docstrings.

Проверки

  • Объединённые targeted analytics tests: 111, успешно; 1 PostgreSQL-only skip на SQLite.
  • 62 новых regression tests: доступ, изоляция, реальные связи, open/distributed,
    безопасные поля, поиск до пагинации, стабильность, совпадение count и SQL-бюджет.
  • Полный локальный backend suite: 675 тестов, OK (2 PostgreSQL-only skip).
  • GitHub обычный CI: Tests и Lint успешно; 675 tests, 2 PostgreSQL-only skip на SQLite.
  • GitHub Backend PostgreSQL CI: успешно, PostgreSQL 15, vendor/locking, checks, миграции на пустой БД, 39 focused + 675 full tests без skip.
  • Scoped Black и flake8 (7 Python-файлов): успешно.
  • manage.py check, check --tag models: успешно.
  • makemigrations --check --dry-run: No changes detected.
  • git diff --check: успешно.
  • SQL 1→31 строки: фактически 4 → 4 для каждого endpoint; 2 дополнительных instrumented query-budget tests прошли. В PostgreSQL full suite те же regression budgets также прошли.

Ограничение локальной среды: Python 3.12 / flake8 5.0.4 даёт 29 замечаний в
неизменённых файлах; те же замечания воспроизведены из origin/dev через stdin.
GitHub Lint (штатный Python 3.11) прошёл. Локальные Django tests импортируют
существующую внешнюю заглушку WeasyPrint из-за отсутствия Pango — это не проверка
PDF. Стандартный и PostgreSQL CI используют реальные зависимости. Локального
PostgreSQL нет; выполнение проверяется штатным workflow_dispatch на этой ветке.

Границы

Изменены только восемь файлов backend-аналитики, её тестов и документации.
Модели, миграции, зависимости, scoring/submission lifecycle, авторизация,
Angular, React, shared app-modal, workflows, Docker и deployment не менялись.
Нет новых действий записи, сообщений, назначений экспертов, SLA или выгрузок.
Ручной browser smoke и deploy не выполнялись. PR — Draft; merge/deploy запрещены.

База: 079e4225c378526bbff1abcf5188c2b557938b0a.
Head: 5b030625499efe94cfd67db9694c713eecf2539f.
Ветка: feature/dev-program-attention-drilldown-api.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 5, 2026 20:45
@TThanos3000
TThanos3000 merged commit bc1fffb into dev Sep 5, 2026
4 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