Skip to content

feat(programs): кнопка «Вернуть в черновик» у организатора - #516

Merged
TThanos3000 merged 1 commit into
devfrom
feat/program-return-to-draft
Oct 30, 2026
Merged

TThanos3000 merged 1 commit into
devfrom
feat/program-return-to-draft

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Что изменено

В кабинете организатора, «Настройки → Основное», у опубликованной программы появилась вторичная кнопка «Вернуть в черновик». Стандартный диалог объясняет, что программа скроется от участников, а участники, заявки, решения и оценки сохранятся.

Зачем

Организатору больше не нужно обращаться к ручному флагу Draft в Django admin. После возврата доступна прежняя подготовка к запуску и повторная публикация.

Реализация

Действие проходит через management use case/repository/HTTP adapter. Только успешный ответ обновляет состояние и отправляет ProgramUpdated для сброса кешей страницы и каталога. При несохраненных изменениях кнопка заблокирована; при запросе отключены поля и повторное действие, уход проверяет существующий guard. Успех переводит фокус на ссылку подготовки к запуску.

API

Новый POST /programs/{id}/management/unpublish/ с expected_updated_at, ответ ProgramManagement. CamelcaseInterceptor преобразует поля по существующему контракту. Требует API #846, который внедряется первым. Старые контракты не меняются.

UI

Существующие Button, Modal, Alert, Mont и стили management. Локальное дополнение текущего экрана без новых компонентов/стилей или переработки дизайна. Подтверждение, отмена, loading, dirty, error и success; кнопка скрыта у черновика. Спецификация и DRAFT-1…DRAFT-7 добавлены в docs/modules/program-management.md.

Permissions

Не менялись: сервер проверяет manager конкретной программы либо существующий административный scope; видимость кнопки не заменяет API-проверки.

Проверки

  • Полный Vitest: 3085 тестов / 498 файлов PASS (pool=forks, maxWorkers=2, minWorkers=1).
  • Отдельные тесты проверяют сброс настоящего кеша ProgramRepository после успешного перехода и отсутствие события при ошибке.
  • Angular development build; TypeScript solution contract; ESLint измененных TS и Prettier измененных файлов.
  • Локальная реальная связка Angular + Django + PostgreSQL: Chromium 1280/390, Mont, клавиатура/фокус, отмена без POST, dirty, возврат, отказ участнику и доступ manager, повторная публикация через прежний экран, Django admin. 7 сценариев, 0 JS errors, без переполнения.

Acceptance criteria

  • DRAFT-1 — кнопка и отмена подтверждены DOM-тестом и браузером.
  • DRAFT-2 — состояние и реальная cache invalidation проверены тестами и интеграцией.
  • DRAFT-3/4/5 — права, сохранность, 409 и PostgreSQL concurrency подтверждены в API #846; совместный браузер проверяет публичный отказ и повторную публикацию.
  • DRAFT-6 — Django admin проверен совместно с API #846.
  • DRAFT-7 — dirty/loading/error, повтор и уход проверены тестами; responsive и фокус — браузером.

Выкладка в dev

CI и Deploy to dev-stage для merge-коммита 9ef90b5824b857fe53d52c097e37b279b897d9bf завершились успешно: format, lint, 3085 тестов / 498 файлов, solution contract, сборка и rsync.

  • Live dev отдает новый main-4PUFBXXB.js.
  • Management bundle chunk-EULZHTBU.js из этой CI-сборки доступен и содержит новую кнопку, ссылку подготовки и unpublish endpoint.
  • SPA/API smoke checks и публичная страница программы в Chromium на 1280/390: Mont, один заголовок, без переполнения и JS errors.

Не проверено

Авторизованный сценарий возврата/повторной публикации проверен локально с реальными Angular/Django/PostgreSQL; авторизованной live dev сессии здесь нет. Production не затронут. Три ранее исключенных файла Vitest остаются исключенными.

Риски / migration

Миграций нет. Порядок: API #846, затем Angular. Повторная публикация сохраняет прежние проверки готовности и сроков; возврат не продлевает сроки.

@TThanos3000
TThanos3000 marked this pull request as ready for review October 30, 2026 16:58
@TThanos3000
TThanos3000 merged commit 9ef90b5 into dev Oct 30, 2026
@TThanos3000
TThanos3000 deleted the feat/program-return-to-draft branch October 30, 2026 17:35
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