> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monyfix.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Продукты

> Сущность продуктов магазинов

## Как получить список продуктов

Получить список всех продуктов можно с помощью `GET` запроса к API `/products`.

<Card title="Get products" icon="link" href="/api-reference/products/get-products">
  Перейти к роуту и изучить основные поля
</Card>

<Note>
  Данный роут **требует** JWT авторизацию для получения данных.

  Все ответы возвращаются с сортировкой в зависимости от параметров фильтрации.
</Note>

### Основные фильтры

<Note>
  Фильтры указываются в `GET` параметрах. Все фильтры являются **не обязательными**.
</Note>

| Параметр      | Описание                                                                                                                                                                                    | Значение по умолчанию |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
| `name`        | Ищет продукты по идентичному названию                                                                                                                                                       | **null**              |
| `name_ilike`  | Ищет продукты по названию **БЕЗ** учета регистра                                                                                                                                            | **null**              |
| `name_like`   | Ищет продукты по названию **С** учетом регистра                                                                                                                                             | **null**              |
| `name_neq`    | Ищет продукты которые **НЕ** соответствуют значению **С** учетом регистра. Т.е. если указать **Лампа**, метод вернет только те продукты, название которых не равно **Лампа**                | **null**              |
| `price_lte`   | Ищет продукты, цена которых **Меньше** или **равна** указанной (*Less than or equal*)                                                                                                       | **null**              |
| `price_gte`   | Ищет продукты, цена которых **Больше** или **равна** указанной (*Greater than or equal*)                                                                                                    | **null**              |
| `category_id` | Ищет продукты по определенной категории                                                                                                                                                     | **null**              |
| `order_by`    | Сортирует список продуктов по одному или нескольким полям. Доступные значения: `create_time` (дата создания) и `name` (по названию в алфавитном порядке). Значения передаются через запятую | **create\_time,name** |

Пример использования:

```
GET /products?name__ilike=Кроссовки&price__lte=1000&price__gte=500&category_id=5&order_by=create_time,name
```

### Структура ответа

Метод возвращает массив объектов продуктов:

```json theme={null}
[
  {
    "id": "string",
    "name": "string",
    "price": "numeric",
    "main_picture_url": "string",
    "is_active": "bool",
    "quantity": "int",
    "store_id": "int",
    "detail_desc": "string",
    "question_id": "int"
  }
]
```

где:

`price` - цена товара в **копейках**

`quantity` - кол-во единиц товара (пока что будет всегда **1**)

`question_id` - необезательное поле, вернет `ID` вопроса, привязанного к товару, если есть

`store_id` - `ID` магазина, к которому привязан продукт

## Как получить один продукт

Получить один продукт можно с помощью `GET` запроса к API `/products/{id}` по `ID` продукта.

<Card title="Get single product" icon="link" href="/api-reference/products/get-single-product">
  Перейти к роуту и изучить основные поля
</Card>

<Note>
  Данный роут **требует** JWT авторизацию для получения данных.
</Note>

### Структура ответа

Метод возвращает объект продукта:

```json theme={null}
{
  "id": "string",
  "name": "string",
  "price": "numeric",
  "main_picture_url": "string",
  "is_active": "bool",
  "quantity": "int",
  "store_id": "int",
  "detail_desc": "string",
  "question_id": "int"
}
```

где:

`price` - цена товара в **копейках**

`quantity` - кол-во единиц товара (пока что будет всегда **1**)

`question_id` - необезательное поле, вернет `ID` вопроса, привязанного к товару, если есть

`store_id` - `ID` магазина, к которому привязан продукт

## Как создать продукт

Создать продукт можно с помощью `POST` запроса к API `/products`.

<Card title="Create product" icon="link" href="/api-reference/products/create-product">
  Перейти к роуту и изучить основные поля
</Card>

<Note>
  Данный роут **требует** JWT авторизацию для получения данных.
</Note>

### JSON объект, необходимый для создания

<Note>
  Запрос должен отправляться как `multipart/form-data`, чтобы можно было отправить изображение в виде файла.
</Note>

```json theme={null}
{
  "name": "string",
  "price": 0,
  "main_picture_url": "string",
  "is_active": true, // не обязательно
  "quantity": 1, // не обязательно
  "store_id": 0, // не обязательно
  "detail_desc": "string", // не обязательно
  "question_id": 0 // не обязательно
}
```

где:

`main_picture_url` - Загруженное пользователем изображение в формате `File`
