# Handoff для frontend по trainingType в Item

## Паспорт документа

- Статус документа: working reference
- Актуально на: 15 апреля 2026 года
- Владелец: backend/platform-команда, совместно с frontend-командой
- Пересмотр: при изменении контрактов `Item.trainingType`, catalog filter или seller item CRUD
- Область применения: handoff backend-контракта поля `trainingType` для команды `qadam-web`
- Связанные документы:
  - [Индекс документации](../README.md)
  - [frontend-handoff.md](./frontend-handoff.md)
  - [openapi.json](../../apps/api/openapi/openapi.json)
  - [frontend-package-discounts-handoff-2026-04-15.md](./frontend-package-discounts-handoff-2026-04-15.md)

- Статус: ready for frontend
- Актуально на: 15 апреля 2026
- Репозиторий: `qadam-core`
- Ветка: `dev`

## Что добавлено

В `Item` добавлено nullable-поле:

- `trainingType: "LESSON" | "COURSE" | null`

Null допустим для уже существующих айтемов. Если значение `null`, фронт может не показывать бейдж и не подсвечивать тип обучения.

## Seller API

### `POST /api/v1/seller/items`

Body теперь принимает:

```json
{
  "trainingType": "LESSON"
}
```

Допустимые значения:

- `LESSON`
- `COURSE`
- `null`

### `PUT /api/v1/seller/items/:id`

Body также принимает `trainingType`.

### `GET /api/v1/seller/items`

Каждый элемент списка seller items теперь возвращает:

```json
{
  "trainingType": "COURSE"
}
```

### `GET /api/v1/seller/items/:id`

В seller item detail теперь также приходит:

```json
{
  "trainingType": "LESSON"
}
```

## Catalog API

### `GET /api/v1/catalog/items`

Добавлен query-параметр:

```text
trainingType=LESSON
trainingType=COURSE
trainingType=LESSON&trainingType=COURSE
```

Фронт может передавать его как массив по той же модели, что `studyType` и `studyFormat`.

Каждый элемент каталога теперь возвращает:

```json
{
  "trainingType": "LESSON"
}
```

### `GET /api/v1/catalog/items/:slug`

В item detail теперь также приходит:

```json
{
  "trainingType": "COURSE"
}
```

## Что фронту нужно сделать

1. Подключить чипы `Занятие / Курс` в seller form через `trainingType`.
2. Передавать `trainingType` в create/update item requests.
3. Подключить фильтр каталога по `trainingType`.
4. Показать бейдж `Занятие / Курс` в catalog card и item detail, если `trainingType !== null`.

## Источник истины

- OpenAPI: [openapi.json](../../apps/api/openapi/openapi.json)
- Этот handoff: [frontend-training-type-handoff-2026-04-15.md](./frontend-training-type-handoff-2026-04-15.md)
