Skip to content

Add submission assignment API - #668

Merged
TThanos3000 merged 2 commits into
masterfrom
feature/submission-assignment-api
Jul 26, 2026
Merged

Add submission assignment API#668
TThanos3000 merged 2 commits into
masterfrom
feature/submission-assignment-api

Conversation

@TThanos3000

Copy link
Copy Markdown
Collaborator

Что изменено

Добавлен manager API для назначения экспертов на зафиксированные Submission.

Реализованы endpoints:

  • GET /programs/<program_id>/submission-assignments/
  • POST /programs/<program_id>/submission-assignments/
  • POST /submission-assignments/<assignment_id>/revoke/

Возможности

  • просмотр истории назначений экспертов;
  • фильтрация по Submission, эксперту и статусу;
  • создание назначения;
  • идемпотентное повторное назначение;
  • создание нового episode после revoked;
  • отзыв активного назначения;
  • безопасный 404 для менеджеров других программ;
  • отображение статуса Evaluation без раскрытия данных решения и участников.

Бизнес-правила

Создание назначения разрешено только если:

  • Submission относится к программе из URL;
  • Submission находится в статусе submitted или final;
  • эксперт состоит в указанной программе;
  • отсутствует завершенное назначение для этой пары.

Поведение повторного запроса:

  • существующее assigned возвращается с 200;
  • после revoked создается новое назначение с 201;
  • существующее completed возвращает 409.

Отзыв назначения:

  • переводит assigned в revoked;
  • сохраняет автора, дату и причину отзыва;
  • повторный отзыв не изменяет первоначальные audit-поля;
  • запрещен для completed;
  • запрещен при наличии отправленной Evaluation;
  • не удаляет draft Evaluation и EvaluationScore.

Транзакционность

  • создание и отзыв выполняются в transaction.atomic;
  • используется select_for_update;
  • гонка при создании обрабатывается через partial UniqueConstraint;
  • IntegrityError перехватывается после отката вложенного savepoint;
  • ожидаемые конфликты не приводят к HTTP 500.

Доступ

Создание и просмотр:

  • менеджер указанной программы;
  • staff;
  • superuser.

Отзыв:

  • менеджер программы назначения;
  • staff;
  • superuser.

Посторонний менеджер получает 404.

Throttling

Для создания назначения добавлен scope:

submission_assignment_create

@TThanos3000
TThanos3000 merged commit 4a92819 into master Jul 26, 2026
2 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