VEU.WathBody/1-docs/4-modules/m08-admin-web/api_specs/02-athletes.md

1.8 KiB
Raw Blame History

Спецификация 02: атлеты (AdminAthletesController)

Источники: Ф-9.1 (управление, вопрос 9 закрыт), 🛡2 (ключ — один раз).

1. Эндпоинты (все — Bearer, spec 01)

Метод Путь Тело → Ответ
GET /api/admin/athletes → {"items":[{"id":1,"name":"Иван","isBlocked":false,"createdAt":"…"}]}
POST /api/admin/athletes {"name":"Иван"} → 201 {"id":…,"apiKey":"wb-…"}
POST /api/admin/athletes/{id}/key — → 200 {"apiKey":"wb-…"}
POST /api/admin/athletes/{id}/block {"isBlocked":true} → 200 {"id":…,"isBlocked":true}

2. Семантика

  • Создание: имя непустое (иначе 400); ключ = "wb-" + 24 hex (random); в БД — только ApiKeyHash.Of(key) (SHA-256, как m02); ключ возвращается один раз (повторно не выдаётся — 🛡2); дубликат имени допустим (БД не запрещает; консоль показывает id).
  • Смена ключа: новый ключ по тому же правилу; athlete_update (все поля, NULL-семантики нет — m01); старый ключ перестаёт работать немедленно.
  • Блокировка: athlete_update c is_blocked; заблокированный ключ → 401 на /api/v1/* (m02, проверяется тестом сквозняком); блокировка не удаляет данные.
  • Все записи — только athlete_insert/athlete_update (🛡3).

3. Ошибки

  • 400 — пустое имя; 404 — атлет не найден (id); 401 — без токена.