Skip to content

Эксперты программы: приглашения, распределение и кабинет оценки - #788

Merged
TThanos3000 merged 4 commits into
devfrom
feat/dev-experts-workspace
Oct 18, 2026
Merged

TThanos3000 merged 4 commits into
devfrom
feat/dev-experts-workspace

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Выложено на DEV: backend deployment, затем Angular #445. Миграции, pinned Web/Celery images, nginx/admin/celery и live route smoke прошли.

Что изменено

Организатор программы приглашает экспертов по email, назначает сданные проекты вручную или через предпросмотр автораспределения и меняет необходимое число оценщиков. Эксперт явно принимает приглашение и получает личный список программ/назначений. Существующий аккаунт сохраняет основную роль.

Зачем

Перенести управление экспертами из Django Admin в панель организатора. Согласованные макеты: эксперты, приглашение, кабинет. Реализация и rollout только на dev.

Реализация

Новая таблица приглашений хранит digest случайной ссылки; срок 7 дней, resend меняет token, revoke отменяет непринятое приглашение. Celery использует существующий mail backend и queued/sent/failed. Короткая регистрация атомарно создаёт аккаунт и членство; email фиксирован, дата рождения не нужна только этому сценарию. Обычная регистрация и редактирование обычного профиля сохраняют требование даты. Reset сохраняет контекст приглашения, включая повторный вход после принятия.

Ручные назначения защищают любые сохранённые оценки. Все новые organizer writes и scoring используют блокировку программы. Подписанный 15-минутный план сверяет revision состава, проектов, команды, назначений и оценок. Pending и собственная команда исключены. N — минимум полных оценок; изменение N сохраняет оценки и назначения. Полная форма принимает 0/False и необязательный комментарий; дедлайн проверяется сервером.

API

Новые /programs/{id}/management/experts/, expert-invitations/, expert-allocation/, evaluators/; /evaluation/programs/, own acceptance и public token flow. Подробный контракт, ошибки и совместимость — docs/expert-workspace.md. Старые rating payload/endpoints сохранены. Новый Angular запрашивает assigned_only=1; организатор должен назначить проекты существующим экспертам.

UI

В связанном Angular #445: пятая вкладка «Эксперты», центрированные модалки, путь приглашения и «Мои программы». Mont и существующие DS controls. Этот PR добавляет письмо и API, а также направляет /evaluation/ в API на DEV Nginx. Invited reset использует SPA /expert-password-reset/, обходя серверный /auth/.

Permissions

Менеджер проверяется в конкретной программе, expert membership — через Expert.programs, независимо от user_type. Есть negative tests на чужую программу/проект/эксперта, pending, другую почту, свою команду, protected scores, expired/revoked/replayed links и конкурентные записи. GET ссылки не принимает приглашение.

Проверки

  • 17 feature/concurrency tests на изолированном PostgreSQL 18, обычный middleware; дополнительный reset-after-acceptance test пройден. 15 feature tests также пройдены в обычном DEBUG/SQLite CI режиме; mail и Celery изолированы в классе тестов.
  • flake8; makemigrations --check --dry-run; миграции применены локально.
  • Linux PostgreSQL CI на итоговом 33b28d5 — success, полный набор1102 теста и отдельные PostgreSQL locking checks.
  • Полный DEBUG/SQLite CI — success.
  • 20 browser checks с реальным локальным API/PostgreSQL: все роли, invite/signup/accept, manual/auto/N, оценка 0/Нет, счётчики, reset до смены пароля и повторного входа; 1440/390/360, focus/Escape.

Локальный полный прогон: 1102 теста; старые проверки кириллического поиска не прошли на Windows PostgreSQL с LC_CTYPE=C (upper кириллицы не преобразует регистр), teardown также встретил открытые async connections. Эти ограничения не объявляются зелёным full-suite result; Linux CI на 434082f прошёл: 1102 теста. Итоговый head33b28d5 также прошёл полный PostgreSQL CI; дополнительные recovery/SQLite feature checks пройдены отдельно.

Acceptance criteria

  • AC1–AC6: invitation/signup/login/reset/scope/manual/auto/N/full-score/защита оценок — API tests и source audit.
  • AC7: личные программы, zero assignments и scoped roles — API tests.
  • AC8: адаптивный UI/клавиатура/центрирование — Angular Dev #445 browser acceptance.
  • AC9: полный PostgreSQL regression CI на итоговом head.

Не проверено

Фактическое попадание письма в inbox и live authenticated acceptance на dev. Локальная почта — locmem, реальные приглашения пользователям не отправлялись.

Риски / migration

Backend первым, Angular вторым. Migrations: users.0065 (nullable birthday), partner_programs.0022 (required_evaluators), project_rates.0004 (ExpertInvitation). DEV migration connection уже настроен отдельно от runtime. Обычные роли и данные не переносятся массово. Явное использование нового управления включает managed mode и восстанавливает назначения за историческими оценками. Откат nullable birthday после появления новых аккаунтов требует обработки данных; обратную миграцию вслепую не запускать. Production и React не затрагиваются.

DEV backend deployed: Deploy Dev. Migrations0022/0004/0065 applied, pinned Web/Celery image matches3b3d6e2, nginx/admin/celery passed. Anonymous live API returns401/404 JSON; SPA routes200 HTML.

@TThanos3000
TThanos3000 marked this pull request as ready for review October 18, 2026 01:49
@TThanos3000
TThanos3000 merged commit 3b3d6e2 into dev Oct 18, 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