44 lines
1.8 KiB
Markdown
44 lines
1.8 KiB
Markdown
# Спецификация: `GET /api/v1/programs/active` (единица 6)
|
||
|
||
## Назначение
|
||
|
||
Активная версия программы атлета (requirements Ф-8.5; телефон
|
||
перечитывает программу после 409 или по запросу пользователя).
|
||
|
||
## Запрос / ответ
|
||
|
||
- Запрос: без параметров (атлет — из middleware).
|
||
- `200`:
|
||
|
||
```json
|
||
{ "programId": 3, "versionId": "uuid", "version": 5,
|
||
"basedOnVersion": 4, "author": "rules", "status": "active",
|
||
"body": { "...схема LLM-планирования разд. 2, как в БД..." },
|
||
"rationale": "«...»", "createdAt": "..." }
|
||
```
|
||
|
||
Errata (m10, 2026-10-19, сверка живым запросом): ключи — camelCase
|
||
(серверная политика `JsonNamingPolicy.CamelCase`, `WebAppStartup`);
|
||
ранняя редакция примера показывала snake_case. Полезное телефону:
|
||
`versionId`, `version`, `body` (программа с `weeks` на верхнем
|
||
уровне).
|
||
|
||
- `404` — активной версии нет (программа не создана или все версии archived).
|
||
- `401` — middleware.
|
||
|
||
## Логика
|
||
|
||
1. `ProgramRepository.Select` (программа атлета).
|
||
2. `ProgramVersionRepository.Select` (`p_program_id`, `p_status = "active"`).
|
||
3. `ProgramVersionRepository.Get` (строка с `body`).
|
||
4. Активной версии нет → `404 {"error": "no_active_program"}`.
|
||
|
||
## Тесты
|
||
|
||
| # | Проверка | Ожидание |
|
||
|---|---|---|
|
||
| 1 | Есть активная версия | 200, `status = "active"`, `body` не пуст |
|
||
| 2 | Программы нет | 404 |
|
||
| 3 | Все версии archived | 404 |
|
||
| 4 | Программа другого атлета не видна (🛡) | 404 |
|