-
Notifications
You must be signed in to change notification settings - Fork 0
API
На этой странице собраны основные backend-эндпоинты.
Базовый префикс API:
/v1
Для meal-эндпоинтов backend ожидает два заголовка:
Authorization: Bearer <SECRET_KEY>
x-tg-user-id: <telegram_user_id>
Именно так бот идентифицирует пользователя и подтверждает, что запрос пришёл от доверенного клиента.
Простой healthcheck-роут.
{
"status": "healty"
}
Да, в ответе сейчас именно строка "healty".
Это не страшно, просто текущая реализация в коде.
Возвращает последнюю запись пользователя.
- берёт
x-tg-user-idиз заголовка; - ищет последнюю запись в БД;
- если запись есть — возвращает её;
- если нет — отдаёт
404.
{
"id": 15,
"tg_user_id": 123456789,
"text": "рис с курицей",
"created_at": "2026-04-23T14:20:00",
"calories": 540,
"protein": 35.0,
"fat": 12.0,
"carbs": 60.0,
"llm_raw": {
"micro": [
{"name": "B3", "percent_dv": 25},
{"name": "Selenium", "percent_dv": 19}
]
},
"confidence": 89
}
Удаляет последнюю запись пользователя и возвращает её же в ответе.
Возвращает сумму КБЖУ за текущий день.
Backend агрегирует все записи пользователя за текущую дату и возвращает общий итог.
{
"calories": 1200,
"protein": 75.0,
"fat": 40.0,
"carbs": 130.0
}
Если за сегодня записей нет, в ответе могут прийти пустые значения.
Поэтому на клиенте это стоит учитывать отдельно.
Главный эндпоинт проекта.
Сюда отправляется:
- текстовое описание еды;
- опционально — изображение блюда.
multipart/form-data
-
text— обязательное текстовое описание -
file— необязательный файл изображения
curl -X POST "http://localhost:8000/v1/meal/" \
-H "Authorization: Bearer YOUR_SECRET_KEY" \
-H "x-tg-user-id: 123456789" \
-F "text=гречка с куриной грудкой"
curl -X POST "http://localhost:8000/v1/meal/" \
-H "Authorization: Bearer YOUR_SECRET_KEY" \
-H "x-tg-user-id: 123456789" \
-F "text=Проанализируй это изображение" \
-F "[email protected]"
После запроса backend:
- проверяет, что текст не пустой;
- находит или создаёт пользователя;
- отправляет текст и/или картинку в LLM;
- получает JSON с оценкой еды;
- проверяет, что запрос вообще про еду;
- проверяет confidence;
- сохраняет запись в БД;
- возвращает готовую запись.
Возвращается, если:
- запрос пустой;
- модель считает, что это не еда;
- запрос слишком странный или плохо формулирован;
- входные данные не удалось корректно обработать.
Возвращается, если неверный SECRET_KEY.
Актуально, например, для GET /meal/last и DELETE /meal/last, если записей у пользователя нет.
Возвращается, если внешний LLM-сервис временно недоступен или ограничивает запросы.
Проект хранит данные не “вообще”, а отдельно по Telegram-пользователю.
То есть два разных человека, даже если отправят один и тот же текст, будут иметь разные записи в БД.
Это и даёт изоляцию пользовательских данных.