Prod: add project analytics assignment drilldowns - #737
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
База и границы
f0fd3e6d068be5dfbcc53106dac5b1189abf314c.8fba9fbc190531a37338b1f50fe2290c5f710c70.01991a32b3922194d5144e03e09b0e4d3e92147b), без cherry-pick и dev → master merge.Контракт B6a
GET /programs/<program_id>/project-analytics/assignments/: массив реальных assignments по PK;scope=all|completed|pending, default all. Пустой/неподдерживаемый scope → 400. Pending включает not_ready, pending и in_progress.GET /programs/<program_id>/project-analytics/assignments/<assignment_id>/scores/: assignment DTO + все текущие criteria по PK. Unknown/foreign assignment → 404, в том числе для manager обеих программ.attention.delayed_expertsв существующемGET /programs/<program_id>/project-analytics/.Единая семантика
Общий read-only
project_assignment_analytics.pyиспользуется и overview, и drilldowns. Assignment completed только при submitted link текущей программы, непустом наборе criteria и score rows назначенного expert user по всем текущим criteria. Один score или zero criteria не завершают assignment. Статусы: not_ready / pending / in_progress / completed; Добавление критерия делает assignment снова незавершённым. Overview сохраняет total = pending + evaluated и прежнюю by-project completion semantics, без использования max_project_rates как required target.Waiting start = max(current-program datetime_submitted, assignment datetime_created), только для незавершённой submitted-записи с реальной датой. Aware now, seconds >= 0. Missing timestamp, completed и not_ready не создают SLA.
Delayed experts только в distributed: >=1 × 48h → critical; иначе >=2 × 24h → warning. Все реальные assignments входят в totals, но незавершённые без waiting не создают SLA. Порядок: severity, oldest waiting descending, expert_id. В open delayed_experts всегда empty; list показывает реальные assignments без synthetic rows, а project evaluation остаётся по первому current-program ProjectScore.
Scores возвращают все criteria, включая missing score (null/false); существующие string/null, пробелы и пустые строки сохраняются без numeric conversion/trim/average. Expert DTO содержит только expert_id, user_id, first_name, last_name, full_name, avatar.
Совместимость и безопасность
SQL
Assignment SELECT в overview выполняется один раз; его DTOs переиспользуются для counters, by-project и delayed experts. Увеличения query budget нет. Количество возвращаемых строк/память всё ещё зависят от размера программы.
Проверки на exact final head
Документация:
docs/project-analytics-api.md. Локальные тесты используют изолированную PostgreSQL test database; production data не затрагивались.Локальное окружение
При переходе через полночь Windows Loguru выводил WinError 32 при ротации warning.log (файл занят). Runner завершил 1438 тестов с OK / exit 0; это отмечено отдельно от результатов assertions. Logging middleware/config совпадают с base и в PR не менялись. Изолированная локальная test database удалена после завершения процесса.