31 lines
1.8 KiB
Markdown
31 lines
1.8 KiB
Markdown
# Спецификация 04: программы (AdminProgramsController)
|
||
|
||
Источники: Ф-9.3, Ф-10.3, m03 (ProgramStore), 🛡4 module_reqs.
|
||
|
||
## 1. Эндпоинты (Bearer)
|
||
|
||
| Метод | Путь | Ответ |
|
||
|---|---|---|
|
||
| GET | `/api/admin/programs?athleteId` | `{"items":[{versionId, version, status, author, basedOnVersion, rationale, createdAt}]}` (без body) |
|
||
| GET | `/api/admin/programs/{versionId}?athleteId` | версия с `body` (json как есть) |
|
||
| POST | `/api/admin/programs/{versionId}/activate?athleteId` | `200 {"version":N,"status":"active"}` |
|
||
| POST | `/api/admin/programs/{versionId}/apply?athleteId` | `200 {"versionId":"…","version":N,"status":"active"}` |
|
||
|
||
## 2. Семантика
|
||
|
||
- **Активация**: только `draft` (иначе 400); `ProgramStore.Activate`
|
||
— прежняя active → archived (гарантия БД). Повторная активация
|
||
archived — 400 (m03).
|
||
- **Применение предложения правил** (Ф-9.3): только rules-draft;
|
||
`ProgramStore.CreateDraft(athleteId, body=rules-draft.body,
|
||
author=admin, rationale=оригинал + " (применено из консоли)")` →
|
||
активация новой версии. 🛡4: оригинальный rules-draft не меняется
|
||
(остаётся draft — владелец может его архивировать активацией
|
||
другой версии; дедуп-замок m05 снимается тем, что новая active
|
||
версия уже существует). Не-rules версия на apply → 400.
|
||
- 🛡3: других записей нет (редактирование body — вне v1).
|
||
|
||
## 3. Ошибки
|
||
|
||
401; 404 — версия/атлет не найдены; 400 — статус не позволяет.
|