API: Cases¶
Базовый URL: http://localhost:8001. Префикс: /api/cases.
Auth: Bearer JWT.
Гейт: MEDICAL_ASSISTANT_ENABLED + LEARNING_ROLES.
При первом списке вызывается ensure_seed_cases — создаются seed-кейсы EN+RU (идемпотентно по title).
GET /api/cases¶
Список кейсов.
Query
| Параметр | Описание |
|---|---|
language |
en | ru — фильтр seed по языку |
specialty |
Фильтр специальности |
difficulty |
Фильтр сложности |
Response 200
{
"items": [
{
"id": "…",
"title": "…",
"description": "…",
"specialty": "cardiology",
"difficulty": "intermediate",
"steps": [
{"step": 1, "question": "…", "options": ["A", "B"]}
],
"created_at": "…"
}
]
}
Правильные ответы и пояснения в списке/GET скрыты.
GET /api/cases/{case_id}¶
Один кейс по UUID (public_id). 404 если нет.
Тело как элемент items выше (без correct_answer / explanation).
POST /api/cases/generate¶
Сгенерировать кейс (LLM / generator).
Request
{
"specialty": "cardiology",
"difficulty": "intermediate",
"language": "en",
"topic": "ACS",
"persist": true
}
| Поле | По умолчанию | Описание |
|---|---|---|
specialty |
— | обязательно |
difficulty |
intermediate |
уровень |
language |
en |
язык |
topic |
null | опционально |
persist |
true | сохранить в БД |
Response 200 — сериализованный кейс (если persist) или сырой payload генератора.
POST /api/cases/{case_id}/submit¶
Отправить ответ на шаг.
Request
{
"step_index": 0,
"answer": "Obtain ECG",
"time_spent": 45
}
| Поле | Описание |
|---|---|
step_index |
≥ 0 |
answer |
1–1000 символов |
time_spent |
секунды, опционально |
Response 200
{
"correct": true,
"correct_answer": "Obtain ECG",
"explanation": "…",
"score": 1.0,
"step": 1
}
Пишет прогресс module=cases со score 0 или 100.
Пример curl¶
curl -s "http://localhost:8001/api/cases?language=ru" \
-H "Authorization: Bearer $JWT"