# Инструкция по интеграции мобильного API календарного сервиса

## Обзор

Этот документ содержит информацию о том, как интегрировать мобильное приложение с API календарного сервиса. Календарный сервис предоставляет эндпоинты для создания, получения и удаления записей в календаре женского здоровья.

## Базовый URL

```
http://[domain]/api/v1/calendar/
```

## Аутентификация

Все запросы к API должны включать токен аутентификации в заголовке `Authorization`:

```
Authorization: Bearer [token]
```

Для получения токена аутентификации используйте сервис аутентификации:

```
POST /api/v1/auth/token
Content-Type: application/x-www-form-urlencoded

username=user@example.com&password=userpassword
```

## Эндпоинты для мобильного приложения

### 1. Создание записи в календаре

```
POST /api/v1/calendar/entries/mobile
Content-Type: application/json
Authorization: Bearer [token]
```

#### Формат запроса

```json
{
  "date": "2025-09-26",
  "type": "MENSTRUATION",
  "flow_intensity": 3,
  "symptoms": ["CRAMPS", "HEADACHE"],
  "mood": "NORMAL",
  "notes": "Пример записи"
}
```

#### Параметры

| Параметр       | Тип          | Обязательный | Описание                                                                              |
|----------------|--------------|--------------|--------------------------------------------------------------------------------------|
| date           | string       | Да           | Дата записи в формате YYYY-MM-DD                                                      |
| type           | string       | Да           | Тип записи: MENSTRUATION, OVULATION, SPOTTING, DISCHARGE, PAIN, MOOD                  |
| flow_intensity | integer      | Нет          | Интенсивность выделений по шкале 1-5 (только для MENSTRUATION и SPOTTING)             |
| symptoms       | array[string]| Нет          | Массив симптомов: CRAMPS, HEADACHE, BLOATING, FATIGUE, и т.д.                         |
| mood           | string       | Нет          | Настроение: HAPPY, SAD, NORMAL, STRESSED, ANXIOUS, IRRITATED                          |
| notes          | string       | Нет          | Текстовая заметка                                                                     |

#### Пример успешного ответа

```json
{
  "id": 123,
  "uuid": "550e8400-e29b-41d4-a716-446655440000",
  "entry_date": "2025-09-26",
  "entry_type": "period",
  "flow_intensity": "medium",
  "period_symptoms": "",
  "mood": "happy",
  "energy_level": 1,
  "sleep_hours": 0,
  "symptoms": "CRAMPS, HEADACHE",
  "medications": "",
  "notes": "Пример записи",
  "is_predicted": false,
  "confidence_score": null,
  "created_at": "2023-09-26T14:30:00.000Z"
}
```

### 2. Получение записей календаря

```
GET /api/v1/calendar/entries
Authorization: Bearer [token]
```

#### Параметры запроса (в URL)

| Параметр    | Тип    | Обязательный | Описание                                 |
|-------------|--------|--------------|------------------------------------------|
| start_date  | string | Нет          | Начальная дата в формате YYYY-MM-DD      |
| end_date    | string | Нет          | Конечная дата в формате YYYY-MM-DD       |
| entry_type  | string | Нет          | Тип записи (period, ovulation, symptoms) |
| limit       | integer| Нет          | Ограничение количества возвращаемых записей (по умолчанию 100) |

#### Пример успешного ответа

```json
[
  {
    "id": 123,
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "entry_date": "2025-09-26",
    "entry_type": "period",
    "flow_intensity": "medium",
    "period_symptoms": "",
    "mood": "happy",
    "energy_level": 1,
    "sleep_hours": 0,
    "symptoms": "CRAMPS, HEADACHE",
    "medications": "",
    "notes": "Пример записи",
    "is_predicted": false,
    "confidence_score": null,
    "created_at": "2023-09-26T14:30:00.000Z"
  },
  {
    "id": 124,
    "uuid": "550e8400-e29b-41d4-a716-446655440001",
    "entry_date": "2025-09-30",
    "entry_type": "ovulation",
    "flow_intensity": null,
    "period_symptoms": "",
    "mood": "happy",
    "energy_level": 1,
    "sleep_hours": 0,
    "symptoms": "BREAST_TENDERNESS",
    "medications": "",
    "notes": "Пример записи об овуляции",
    "is_predicted": false,
    "confidence_score": null,
    "created_at": "2023-09-26T14:30:00.000Z"
  }
]
```

### 3. Удаление записи календаря

```
DELETE /api/v1/entries/{entry_id}
Authorization: Bearer [token]
```

#### Параметры

| Параметр  | Тип     | Обязательный | Описание              |
|-----------|---------|--------------|------------------------|
| entry_id  | integer | Да           | ID записи для удаления |

#### Пример успешного ответа

```json
{
  "message": "Entry deleted successfully"
}
```

### 4. Получение обзора цикла

```
GET /api/v1/cycle-overview
Authorization: Bearer [token]
```

#### Пример успешного ответа

```json
{
  "current_cycle_day": 14,
  "current_phase": "ovulation",
  "next_period_date": "2023-10-15",
  "days_until_period": 12,
  "cycle_regularity": "regular",
  "avg_cycle_length": 28
}
```

## Маппинг типов данных

### Типы записей

| Мобильное приложение | Сервер       |
|----------------------|--------------|
| MENSTRUATION         | period       |
| OVULATION            | ovulation    |
| SPOTTING             | symptoms     |
| DISCHARGE            | symptoms     |
| PAIN                 | symptoms     |
| MOOD                 | mood         |

### Интенсивность выделений

| Мобильное приложение | Сервер       |
|----------------------|--------------|
| 1                    | light        |
| 2                    | light        |
| 3                    | medium       |
| 4                    | heavy        |
| 5                    | heavy        |

### Настроение

| Мобильное приложение | Сервер       |
|----------------------|--------------|
| HAPPY                | happy        |
| SAD                  | sad          |
| NORMAL               | happy        |
| STRESSED             | anxious      |
| ANXIOUS              | anxious      |
| IRRITATED            | irritated    |

## Тестирование API

Для тестирования API можно использовать скрипты:

1. `setup_mobile_test.py` - создание токена для тестирования
2. `mobile_format_test.py` - тестирование преобразования форматов данных
3. `test_mobile_api.py` - полное тестирование мобильного API

### Пример запроса с curl

```bash
curl -X POST http://localhost:8004/api/v1/calendar/entries/mobile \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(cat auth_token.txt)" \
  -d '{
    "date": "2025-09-26", 
    "type": "MENSTRUATION", 
    "flow_intensity": 3, 
    "symptoms": ["CRAMPS", "HEADACHE"], 
    "mood": "NORMAL", 
    "notes": "Тестовая запись"
  }'
```

## Коды ошибок

| Код  | Описание                              |
|------|---------------------------------------|
| 400  | Неверный запрос или данные            |
| 401  | Ошибка аутентификации                 |
| 404  | Запись не найдена                     |
| 422  | Ошибка валидации данных               |
| 500  | Внутренняя ошибка сервера             |

## Контактная информация

При возникновении вопросов или проблем с интеграцией, пожалуйста, свяжитесь с командой разработки.