Skip to content

feat: управление критериями оценки программы - #786

Merged
TThanos3000 merged 2 commits into
devfrom
feat/dev-program-evaluation-criteria
Oct 17, 2026
Merged

TThanos3000 merged 2 commits into
devfrom
feat/dev-program-evaluation-criteria

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator

Что изменено

Организатор может управлять общим набором критериев программы через GET/PUT /programs/{id}/management/criteria/. После первой сохранённой оценки весь набор фиксируется, включая формулировки и шкалы. Ноль и «Нет» считаются сохранёнными оценками.

Зачем

Переносим настройку оценивания из Django admin в панель организатора. Согласованный дизайн: https://www.figma.com/design/tvog0fpEgWgEtr7KUTjbyE?node-id=267-3220

Реализация

Атомарная замена набора под блокировкой программы; те же блокировки при записи экспертных оценок. Sticky freeze, защита Criteria model/admin, совместимость неизменённых legacy float/неограниченных шкал. «Комментарий» создаётся только при создании программы. Проверка целых конечных баллов и диапазона.

API

Новый manager endpoint возвращает updated_at, revision, locked, supported_types, criteria. PUT требует expected_updated_at и expected_revision; 409 criteria_locked/stale_criteria сохраняют текущую конфигурацию.

Существующий GET /rate-project/{program_id} дополнен criteria_revision. POST принимает старый массив либо {expected_revision,scores}. Для программ, настроенных через новую панель, устаревший/отсутствующий revision возвращает 409 criteria_changed. Для остальных программ прежние массивы совместимы. Пути, success shape, распределения, лимиты и экспертные permissions сохранены.

UI

Angular PR PROCOLLAB-github/procollab#437 поставляется отдельно, после API: пятый settings tab «Оценивание», центрированный редактор и общий preview/expert form. Здесь UI не меняется.

Permissions

Manager endpoint ограничен организатором конкретной программы/staff по общей политике панели. Экспертное оценивание остаётся за экспертами программы с существующей проверкой назначения. Admin/model блокируют изменение зафиксированных критериев.

Проверки

  • Source review: routes, serializers, permissions, revision and lock chains.
  • GitHub PostgreSQL CI: 39 targeted + 1085 full tests, миграции с пустой БД; обычный CI также PASS. Дополнительно локальные regression/SQLite checks.
  • Race: manager save vs first expert score — ровно одна операция проходит.
  • makemigrations --check --dry-run: no changes; migration применяется локально.
  • flake8 изменённых файлов, diff check.
  • Browser: 12 сценариев Angular с реальными локальными Django/PostgreSQL; preview не создаёт оценки, first-score conflict сохраняет черновик.

Acceptance criteria

  • Организатор редактирует только свою программу; int/bool/str, общая форма всех кейсов.
  • Весь набор фиксируется после первой оценки; сохранённые значения не меняются.
  • Гонка первой оценки и редактирования безопасна, stale expert form отклоняется.
  • Legacy данные и existing evaluation constraints сохранены.

Не проверено

Авторизованные сценарии на удалённом dev не проверялись: подключённый браузерный инструмент не смог инициализироваться. Организатор/эксперт проверены локально с реальными API/БД. Удалённый анонимный smoke: 18 checks PASS, без page/static errors.

Риски / migration

Миграция 0021 добавляет sticky lock/version и фиксирует программы с существующими оценками. Исторические даты первой оценки неизвестны и не выводятся в UI. Сначала API с миграцией, затем Angular. Production rollout не входит в задачу.

DEV rollout

Миграция 0021 выполнена владельцем БД, app read/UPDATE проверены. Deploy Dev PASS: source 7596455, web/Celery используют один проверенный образ; pending migrations отсутствуют, admin smoke и Celery ping PASS. Angular #437 также внедрён.

@TThanos3000
TThanos3000 merged commit 7596455 into dev Oct 17, 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.

2 participants