# Документация API интернет-магазина одежды

## Содержание
1. [Аутентификация](#аутентификация)
2. [Пользователи](#пользователи)
3. [Каталог](#каталог)
4. [Корзина](#корзина)
5. [Заказы](#заказы)
6. [Отзывы](#отзывы)
7. [Контент](#контент)
8. [Аналитика](#аналитика)

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

Базовый URL: `/auth`

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| POST | `/register` | Регистрация нового пользователя | `UserCreate` (email, password, first_name, last_name) | Нет |
| POST | `/login` | Вход в систему | `username` (email), `password` | Нет |
| POST | `/reset-password` | Запрос на сброс пароля | `email` | Нет |
| POST | `/set-new-password` | Установка нового пароля по токену | `token`, `password` | Нет |
| POST | `/change-password` | Изменение пароля | `current_password`, `new_password` | Да |

## Пользователи

Базовый URL: `/users`

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/me` | Получение профиля текущего пользователя | - | Да |
| PUT | `/me` | Обновление профиля текущего пользователя | `UserUpdate` (first_name, last_name, phone) | Да |
| POST | `/me/addresses` | Добавление адреса пользователя | `AddressCreate` (city, street, house, apartment, postal_code, is_default) | Да |
| PUT | `/me/addresses/{address_id}` | Обновление адреса пользователя | `AddressUpdate` (city, street, house, apartment, postal_code, is_default) | Да |
| DELETE | `/me/addresses/{address_id}` | Удаление адреса пользователя | - | Да |
| GET | `/{user_id}` | Получение профиля пользователя по ID (только для админов) | - | Да (админ) |

## Каталог

Базовый URL: `/catalog`

### Коллекции

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/collections` | Получение списка коллекций | `skip`, `limit` | Нет |
| POST | `/collections` | Создание новой коллекции | `CollectionCreate` (name, slug, description, is_active) | Да (админ) |
| PUT | `/collections/{collection_id}` | Обновление коллекции | `CollectionUpdate` (name, slug, description, is_active) | Да (админ) |
| DELETE | `/collections/{collection_id}` | Удаление коллекции | - | Да (админ) |

### Категории

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/categories` | Получение дерева категорий | - | Нет |
| POST | `/categories` | Создание новой категории | `CategoryCreate` (name, slug, description, parent_id, is_active) | Да (админ) |
| PUT | `/categories/{category_id}` | Обновление категории | `CategoryUpdate` (name, slug, description, parent_id, is_active) | Да (админ) |
| DELETE | `/categories/{category_id}` | Удаление категории | - | Да (админ) |

### Размеры

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/sizes` | Получение списка размеров | `skip`, `limit` | Нет |
| GET | `/sizes/{size_id}` | Получение размера по ID | - | Нет |
| POST | `/sizes` | Создание нового размера | `SizeCreate` (name, code, description) | Да (админ) |
| PUT | `/sizes/{size_id}` | Обновление размера | `SizeUpdate` (name, code, description) | Да (админ) |
| DELETE | `/sizes/{size_id}` | Удаление размера | - | Да (админ) |

### Продукты

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/products` | Получение списка продуктов | `skip`, `limit`, `category_id`, `collection_id`, `search`, `min_price`, `max_price`, `is_active`, `include_variants` | Нет |
| GET | `/products/{product_id}` | Получение детальной информации о продукте | - | Нет |
| GET | `/products/slug/{slug}` | Получение продукта по slug | - | Нет |
| POST | `/products` | Создание нового продукта | `ProductCreate` (name, slug, description, price, discount_price, care_instructions, is_active, category_id, collection_id) | Да (админ) |
| PUT | `/products/{product_id}` | Обновление продукта | `ProductUpdate` (name, slug, description, price, discount_price, care_instructions, is_active, category_id, collection_id) | Да (админ) |
| DELETE | `/products/{product_id}` | Удаление продукта | - | Да (админ) |

### Варианты продуктов

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| POST | `/products/{product_id}/variants` | Добавление варианта продукта | `ProductVariantCreate` (product_id, size_id, sku, stock, is_active) | Да (админ) |
| PUT | `/variants/{variant_id}` | Обновление варианта продукта | `ProductVariantUpdate` (product_id, size_id, sku, stock, is_active) | Да (админ) |
| DELETE | `/variants/{variant_id}` | Удаление варианта продукта | - | Да (админ) |

### Изображения продуктов

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| POST | `/products/{product_id}/images` | Загрузка изображения продукта | `file`, `is_primary` | Да (админ) |
| PUT | `/images/{image_id}` | Обновление изображения продукта | `ProductImageUpdate` (alt_text, is_primary) | Да (админ) |
| DELETE | `/images/{image_id}` | Удаление изображения продукта | - | Да (админ) |

## Корзина

Базовый URL: `/cart`

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/` | Получение корзины пользователя | - | Да |
| POST | `/items` | Добавление товара в корзину | `CartItemCreate` (product_variant_id, quantity) | Да |
| PUT | `/items/{cart_item_id}` | Обновление товара в корзине | `CartItemUpdate` (quantity) | Да |
| DELETE | `/items/{cart_item_id}` | Удаление товара из корзины | - | Да |
| DELETE | `/clear` | Очистка корзины | - | Да |

## Заказы

Базовый URL: `/orders`

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/` | Получение списка заказов | `skip`, `limit`, `status` | Да |
| GET | `/{order_id}` | Получение информации о заказе | - | Да |
| POST | `/` | Создание нового заказа | `OrderCreate` (shipping_address_id, payment_method) | Да |
| PUT | `/{order_id}` | Обновление заказа | `OrderUpdate` (status, tracking_number) | Да (админ) |
| POST | `/{order_id}/cancel` | Отмена заказа | - | Да |

## Отзывы

Базовый URL: `/reviews`

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/products/{product_id}` | Получение отзывов о продукте | `skip`, `limit` | Нет |
| POST | `/` | Создание нового отзыва | `ReviewCreate` (product_id, rating, text) | Да |
| PUT | `/{review_id}` | Обновление отзыва | `ReviewUpdate` (rating, text) | Да |
| DELETE | `/{review_id}` | Удаление отзыва | - | Да |
| POST | `/{review_id}/approve` | Одобрение отзыва | - | Да (админ) |

## Контент

Базовый URL: `/content`

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| GET | `/pages` | Получение списка страниц | `skip`, `limit` | Нет |
| GET | `/pages/{page_id}` | Получение страницы по ID | - | Нет |
| GET | `/pages/slug/{slug}` | Получение страницы по slug | - | Нет |
| POST | `/pages` | Создание новой страницы | `PageCreate` (title, slug, content, is_published) | Да (админ) |
| PUT | `/pages/{page_id}` | Обновление страницы | `PageUpdate` (title, slug, content, is_published) | Да (админ) |
| DELETE | `/pages/{page_id}` | Удаление страницы | - | Да (админ) |

## Аналитика

Базовый URL: `/analytics`

| Метод | Эндпоинт | Описание | Параметры запроса | Требуется авторизация |
|-------|----------|----------|-------------------|------------------------|
| POST | `/log` | Логирование события аналитики | `AnalyticsLogCreate` (event_type, event_data, user_id) | Нет |
| GET | `/logs` | Получение логов аналитики | `event_type`, `start_date`, `end_date`, `skip`, `limit` | Да (админ) |
| GET | `/report` | Получение аналитического отчета | `report_type`, `start_date`, `end_date` | Да (админ) |

## Модели данных

### Пользователи
- `UserCreate`: email, password, first_name, last_name
- `UserUpdate`: first_name, last_name, phone
- `AddressCreate`: city, street, house, apartment, postal_code, is_default
- `AddressUpdate`: city, street, house, apartment, postal_code, is_default

### Каталог
- `CollectionCreate`: name, slug, description, is_active
- `CollectionUpdate`: name, slug, description, is_active
- `CategoryCreate`: name, slug, description, parent_id, is_active
- `CategoryUpdate`: name, slug, description, parent_id, is_active
- `SizeCreate`: name, code, description
- `SizeUpdate`: name, code, description
- `ProductCreate`: name, slug, description, price, discount_price, care_instructions, is_active, category_id, collection_id
- `ProductUpdate`: name, slug, description, price, discount_price, care_instructions, is_active, category_id, collection_id
- `ProductVariantCreate`: product_id, size_id, sku, stock, is_active
- `ProductVariantUpdate`: product_id, size_id, sku, stock, is_active
- `ProductImageCreate`: product_id, image_url, alt_text, is_primary
- `ProductImageUpdate`: alt_text, is_primary

### Корзина и заказы
- `CartItemCreate`: product_variant_id, quantity
- `CartItemUpdate`: quantity
- `OrderCreate`: shipping_address_id, payment_method
- `OrderUpdate`: status, tracking_number

### Отзывы
- `ReviewCreate`: product_id, rating, text
- `ReviewUpdate`: rating, text

### Контент
- `PageCreate`: title, slug, content, is_published
- `PageUpdate`: title, slug, content, is_published
- `AnalyticsLogCreate`: event_type, event_data, user_id 