Skip to content

feat(programs): solution storage and creation API (BE01) - #819

Merged
TThanos3000 merged 3 commits into
devfrom
feat/dev-program-solutions-be01-20261024
Oct 24, 2026
Merged

TThanos3000 merged 3 commits into
devfrom
feat/dev-program-solutions-be01-20261024

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Oct 24, 2026 •

Copy link
Copy Markdown
Collaborator

Что изменено

Программа может хранить заявку как ProgramSolution с вложенными участниками, приглашениями, ответами и снимком сдачи. Добавлены контекст, идемпотентное создание и приватное чтение/список по C00 1.0.0. Обычный Project для нового решения не создается.

Зачем

ТЗ и согласованный D00 v3: программы КЧ/хакатонов получают свою сущность заявки и настраиваемые поля. Scope этого PR — BE01, основа для последующих этапов.

Реализация

Аддитивная миграция 0030; unique/check constraints; капитан и его member создаются атомарно под блокировкой программы. Повтор возвращает существующий ID без переименования, включая запрос после дедлайна. Набор C00 и отчет проверки: docs/product/program-solutions-be01.md.

API

GET /programs/{id}/solution-context/, GET/POST /programs/{id}/solutions/, GET /programs/{id}/solutions/{solution_id}/. Snake_case, strict input, C00 error envelope. Точный current_application различает solution/project/program-link ID; неоднозначность дает 409. До BE02–BE06 изменяющих команд состава, приглашений и сдачи нет, их permissions=false.

UI

В этом репозитории UI не меняется. FE01 использует те же копии OpenAPI/моков; реальная локальная связка Angular/Django/PostgreSQL проверена совместно.

Permissions

Создание по регистрации/исключению менеджера и дедлайну. Чтение своей команды либо организатора/администратора; экспертные назначения и публикация отложены до BE07/BE08. Чужой program/solution ID дает 404. Старое создание/привязка Project закрыты только в явно включенном solution режиме.

Проверки

  • Backend PostgreSQL CI на текущем d7e0923: полный набор 1367 tests PASS; отдельный набор блокировок/откликов 39 tests PASS; Django/model checks, migration consistency и migrate пустой PostgreSQL PASS.
  • Общий CI на текущем d7e0923: Flake8 PASS; SQLite — 1367 tests, OK (skipped=34). Тест реальных row locks выполняется на PostgreSQL и пропускается на СУБД без select_for_update.
  • Локальная PostgreSQL 18 / settings_ci: 147 targeted/regression tests, включая 15 новых; конкурентное создание дает один объект. После последнего изменения теста: PostgreSQL 15 PASS, SQLite 14 PASS + 1 ожидаемый skip.
  • Реальные wire responses проверены JSON Schema C00; пакет: 47 схем, 22 операции, 43 независимых сценария.
  • Black и Flake8 новых файлов, Flake8 измененных модулей; poetry check --lock; git diff --check.
  • Browser: новая заявка, повторный вход, вкладки; старый режим открывает прежний Project editor с exact programLinkId.
  • Source review: исправления проверены, открытых findings в scope нет; PR направлен в dev, конфликтов слияния нет.

Acceptance criteria

  • AC01 — создание без Project/Team, капитан в составе один раз.
  • AC02 — repeat 200 / first 201; PostgreSQL concurrency без дубля.
  • AC20 — независимость программ, негативный доступ и точные current_application ссылки.
  • AC22 в scope BE01 — default legacy, 132 связанные регрессионные проверки и legacy browser путь.

Не проверено

Расширенный локальный запуск Windows прервался в native PDF rendering сертификата; он не считается пройденным. Полные наборы на Linux PostgreSQL и SQLite прошли. Production, BE10 migration и QA01 полного приглашения/сдачи не выполнялись и не входят в BE01.

Риски / migration

Режим по умолчанию legacy_project. Сначала backend с миграциями, затем FE01. Включение для реальных участников — только REL01 после BE02–BE09, FE02–FE08 и QA01. Старые программы и данные автоматически не переносятся. Merge и deployment выполняет пользователь.

Парный frontend PR: PROCOLLAB-github/procollab#501 .

@TThanos3000
TThanos3000 marked this pull request as ready for review October 24, 2026 14:42
@TThanos3000
TThanos3000 merged commit 562d072 into dev Oct 24, 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