Skip to content

feat: массовые действия участников и экспертов программы - #804

Merged
TThanos3000 merged 2 commits into
devfrom
feat/dev-management-row-actions-20261020
Oct 20, 2026
Merged

TThanos3000 merged 2 commits into
devfrom
feat/dev-management-row-actions-20261020

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Что изменено

Организатор может выбрать все записи по текущим фильтрам, выгрузить выбранных участников и удалить их регистрацию только в этой программе. Удаление лидера требует подтверждения точного списка заявок; аккаунт, общий проект, команда, другие программы и история оценок сохраняются.

Зачем

Поддержать меню строк и массовые операции панели управления вместо одиночных плавающих плашек. Страницы участников и проектов по умолчанию содержат 20 записей.

Реализация

Подписанный preview действует 15 минут и привязан к программе, организатору, участникам, заявкам, назначениям и оценкам. Удаление повторно проверяет права и снимок под блокировками Project → программы → регистрации. Удаляются только регистрации, связи проектов этой программы и их активные назначения; общий Project, Collaborator и ProjectScore остаются. Повторное или устаревшее подтверждение возвращает 409.

API

  • GET management/participants/selection/, management/projects/selection/: все ID по тем же фильтрам, независимо от limit/offset; проекты возвращают ID заявки и глобальный project_id.
  • POST management/participants/export/ с ids; прежний GET экспорта остается.
  • POST management/participants/remove-preview/, затем management/participants/remove/ с ids и preview_token.
  • POST management/experts/bulk/: кейсы, повторная отправка или отзыв приглашений. Вся выборка проверяется атомарно по membership/revision; почтовые задачи ставятся после commit.
  • Фильтр проектов evaluation=all|evaluated|not_evaluated использует существующий расчет готовности. Частично оцененные относятся к неоцененным.
  • Excel: «Дата регистрации (МСК)»; типизированная дата последней активности и защита от формул сохраняются.

UI

В Angular #467: меню трех точек, чекбоксы и плавающие массовые действия. Макет: вариант 3.

Permissions

Все новые операции доступны только управляющим данной программой. Права проверяются до payload validation; чужие ID, неполный набор, принятые приглашения и устаревшая revision отклоняются без частичных записей или отправок.

Проверки

  • PostgreSQL: manage.py test partner_programs project_rates projects --keepdb --noinput — 743 passed, включая конкурентное удаление одного preview.
  • Финальный набор bulk: 10 тестов PostgreSQL. Тест row locks выполняется только на СУБД с select_for_update; CI PostgreSQL проверяет его без пропуска.
  • Django check, makemigrations --check --dry-run — успешно, новых миграций нет.
  • flake8 измененных Python файлов — успешно.
  • Browser 1440/390/360: реальные API на изолированной локальной базе, locmem почта; сохранение команды/аккаунта/другой программы, предупреждение лидера, массовые кейсы/resend/revoke, Excel.

Acceptance criteria

  • AC2/3: default20, selection всех страниц с фильтрами.
  • AC4/5: дата регистрации в Excel, настоящая дата активности сохранена.
  • AC6/7: удаление только регистрации/заявок программы, signed preview, stale/concurrent/foreign/anonymous checks.
  • AC8/9/10: фильтр оценивания, атомарные действия экспертов, корректные ID назначения и прежние квоты/фиксация оценок.
  • AC1/11: совместимость с Angular меню и массовым выбором проверена в браузере.
  • AC12: PostgreSQL CI и совместимость прошли; API развернут на DEV. Финальное исправление конкурентной оценки — #805, 1234 PostgreSQL теста, runtime grants, HTTP smoke и Celery прошли. Angular fix 1 #467 опубликован, browser QA1440/390/360 прошел.

Не проверено

Изменяющие операции с реальными dev-пользователями и настоящая отправка писем не выполнялись. Опубликованные Angular assets проверены с изолированным API; настоящие dev API/SPA маршруты проверены 10 анонимными GET-запросами.

Риски / migration

Выкатить API первым, затем Angular. Миграции и изменения данных при деплое не требуются. Заявки лидеров удаляются только после явного подтверждения организатором; оцененные заявки также перечислены в предупреждении.

@TThanos3000
TThanos3000 merged commit 1dc36f2 into dev Oct 20, 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