All checks were successful
continuous-integration/drone/push Build is passing
188 lines
5.1 KiB
Markdown
188 lines
5.1 KiB
Markdown
# Nutrition Service API Documentation
|
||
|
||
## Overview
|
||
|
||
Nutrition Service предоставляет API для отслеживания питания, подсчета калорий и получения информации о продуктах питания через интеграцию с FatSecret API. Сервис позволяет пользователям контролировать свой рацион и отслеживать потребление воды.
|
||
|
||
**Base URL:** `/api/v1/nutrition`
|
||
|
||
## Authentication
|
||
|
||
Все эндпоинты требуют JWT аутентификацию.
|
||
|
||
**Headers:**
|
||
```
|
||
Authorization: Bearer <jwt_token>
|
||
```
|
||
|
||
## API Endpoints
|
||
|
||
### 🔍 Поиск продуктов
|
||
|
||
#### Найти продукты по названию
|
||
```http
|
||
GET /api/v1/nutrition/foods?query=яблоко
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
**Параметры:**
|
||
- `query` (string, required): Поисковый запрос для поиска продуктов
|
||
- `page` (number, optional): Номер страницы результатов, по умолчанию 1
|
||
- `page_size` (number, optional): Количество результатов на странице, по умолчанию 20
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"results": [
|
||
{
|
||
"food_id": "123456",
|
||
"name": "Яблоко, сырое, с кожурой",
|
||
"brand": "",
|
||
"calories": 52,
|
||
"serving_size": "100г",
|
||
"nutrients": {
|
||
"carbohydrates": 13.8,
|
||
"protein": 0.3,
|
||
"fat": 0.2,
|
||
"fiber": 2.4
|
||
}
|
||
}
|
||
],
|
||
"total": 25,
|
||
"page": 1,
|
||
"page_size": 20
|
||
}
|
||
```
|
||
|
||
### 📝 Записи о питании
|
||
|
||
#### Добавить запись о питании
|
||
```http
|
||
POST /api/v1/nutrition/entries
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
**Body:**
|
||
```json
|
||
{
|
||
"food_id": "123456",
|
||
"date": "2025-10-16",
|
||
"meal_type": "lunch",
|
||
"quantity": 1.0,
|
||
"serving_size": "100г",
|
||
"notes": "Красное яблоко"
|
||
}
|
||
```
|
||
|
||
**Варианты типов приема пищи (meal_type):**
|
||
- `breakfast` - завтрак
|
||
- `lunch` - обед
|
||
- `dinner` - ужин
|
||
- `snack` - перекус
|
||
|
||
#### Получить записи о питании
|
||
```http
|
||
GET /api/v1/nutrition/entries?date=2025-10-16
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
**Параметры:**
|
||
- `date` (string, optional): Дата в формате YYYY-MM-DD
|
||
- `start_date` (string, optional): Начальная дата для получения записей за период
|
||
- `end_date` (string, optional): Конечная дата для получения записей за период
|
||
- `meal_type` (string, optional): Фильтр по типу приема пищи
|
||
|
||
#### Удалить запись о питании
|
||
```http
|
||
DELETE /api/v1/nutrition/entries/{entry_id}
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
### 💧 Отслеживание воды
|
||
|
||
#### Добавить запись о потреблении воды
|
||
```http
|
||
POST /api/v1/nutrition/water
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
**Body:**
|
||
```json
|
||
{
|
||
"date": "2025-10-16",
|
||
"amount_ml": 250,
|
||
"time": "12:30:00"
|
||
}
|
||
```
|
||
|
||
#### Получить записи о потреблении воды
|
||
```http
|
||
GET /api/v1/nutrition/water?date=2025-10-16
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
### 📊 Сводки и статистика
|
||
|
||
#### Получить дневную сводку по питанию
|
||
```http
|
||
GET /api/v1/nutrition/daily-summary?date=2025-10-16
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"date": "2025-10-16",
|
||
"total_calories": 1578,
|
||
"total_carbohydrates": 175.3,
|
||
"total_proteins": 78.2,
|
||
"total_fats": 52.8,
|
||
"total_water": 1200,
|
||
"entries": [
|
||
{
|
||
"id": 123,
|
||
"food_name": "Яблоко, сырое, с кожурой",
|
||
"meal_type": "lunch",
|
||
"calories": 52,
|
||
"quantity": 1.0,
|
||
"serving_size": "100г"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### Получить недельную аналитику
|
||
```http
|
||
GET /api/v1/nutrition/weekly-summary?start_date=2025-10-10
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
## Интеграция с FatSecret API
|
||
|
||
Сервис использует FatSecret API для получения информации о питательной ценности продуктов. Ключи API хранятся в конфигурации сервера и не требуют дополнительной настройки со стороны клиента.
|
||
|
||
## Примеры использования
|
||
|
||
### JavaScript
|
||
```javascript
|
||
// Пример поиска продуктов
|
||
async function searchFoods(query) {
|
||
const response = await fetch(`http://localhost:8000/api/v1/nutrition/foods?query=${query}`, {
|
||
headers: { 'Authorization': `Bearer ${token}` }
|
||
});
|
||
return response.json();
|
||
}
|
||
|
||
// Пример добавления записи о питании
|
||
async function addNutritionEntry(entryData) {
|
||
const response = await fetch('http://localhost:8000/api/v1/nutrition/entries', {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
'Authorization': `Bearer ${token}`
|
||
},
|
||
body: JSON.stringify(entryData)
|
||
});
|
||
return response.json();
|
||
}
|
||
``` |