BR 1.8.1: Конструктор товара и перенос привязки модификаторов
Зависит от:
Контекст
В BR 1.8 модификаторы привязываются к товару внутри конструктора каталога (таблица catalog_version_product_modifiers). Это создаёт проблемы:
- При каждом новом драфте каталога нужно заново настраивать модификаторы
- Модификаторы — это свойство товара (рецептура, состав), а не каталога (ассортимент)
- Нет единого места для управления товаром — версии, модификаторы, техкарты (будущее) разбросаны
Решение: перенести привязку модификаторов с уровня каталога на уровень версии товара. Создать конструктор товара — единый экран управления товаром и его версиями.
Что меняется
Было (BR 1.8)
Конструктор каталога:
Каталог v3 (draft)
├── Категория "Пицца"
│ ├── Маргарита@v2 + [модификаторы: Размер@v1, Добавки@v2]
│ └── Пепперони@v1 + [модификаторы: Размер@v1]
└── Категория "Напитки"
└── Кола@v1 (без модификаторов)
Модификаторы привязаны к товару в конкретной версии каталога.
Будет (BR 1.8.1)
Конструктор товара "Маргарита":
v1: базовая цена 500₽, модификаторы: Размер@v1
v2: цена 550₽, модификаторы: Размер@v1, Добавки@v2 ← текущая
[Создать новую версию]
Конструктор каталога:
Каталог v3 (draft)
├── Категория "Пицца"
│ ├── Маргарита [v1 ▾ v2 ▾] ← выбор версии вручную
│ └── Пепперони [v1 ▾]
└── Категория "Напитки"
└── Кола [v1 ▾]
Модификаторы привязаны к версии товара. В каталог попадает готовый товар@версия со своими модификаторами.
Два конструктора
1. Конструктор товара (НОВЫЙ)
Единый экран управления товаром — /products/{id}:
- Шапка: название, тип (dish/good), статус
- Список версий: v1, v2, v3… с датами и кратким diff
- Детали выбранной версии:
- Поля товара (название, описание, цена, единица измерения)
- Блок модификаторов (перенесён из конструктора каталога):
- Список привязанных групп с версиями и override min/max
- [+ Добавить модификатор] → модалка выбора группы из справочника
- [Убрать] модификатор
- (Будущее: техкарта — BR 1.9, прейскурант — BR 1.10)
- Кнопка “Создать новую версию” → копирует текущую версию, можно менять поля и модификаторы
Правило: изменение полей товара ИЛИ модификаторов = новая версия товара.
2. Конструктор каталога (УПРОЩАЕТСЯ)
Конструктор из BR 1.7.2, но без управления модификаторами:
- Категории (слева) — без изменений
- Товары (справа):
- Название, селектор версии [v1 ▾ v2 ▾], кнопка [Убрать]
- При наведении — tooltip с модификаторами этой версии (read-only)
- Кнопка “Перейти к товару” → открывает конструктор товара
- Нет кнопки “Добавить модификатор” — это теперь в конструкторе товара
Изменения в данных
Новая таблица: product_version_modifiers
Заменяет catalog_version_product_modifiers.
| Колонка | Тип | Описание |
|---|---|---|
| id | uuid | PK |
| product_id | uuid | FK → products.id |
| product_version | integer | Номер версии товара |
| modifier_group_id | uuid | FK → modifier_groups.id |
| modifier_group_version | integer | Снимок версии группы |
| override_min_amount | integer NULL | Per-product override min |
| override_max_amount | integer NULL | Per-product override max |
| created_at | timestamp |
UNIQUE: (product_id, product_version, modifier_group_id)
Удалить: catalog_version_product_modifiers
Вся таблица удаляется. Данные мигрируются в product_version_modifiers.
Без изменений
catalog_version_products— товар@версия в каталоге, остаётсяmodifier_groups,modifier_options,modifier_group_versions— без измененийproduct_versions— без изменений
Изменения в API
Новые эндпоинты (конструктор товара)
| Method | Path | Описание |
|---|---|---|
| GET | /products/{id}/versions | Список версий товара |
| GET | /products/{id}/versions/{v} | Версия с модификаторами |
| POST | /products/{id}/versions | Создать новую версию |
| GET | /products/{id}/versions/{v}/modifiers | Модификаторы версии |
| POST | /products/{id}/versions/{v}/modifiers | Привязать модификатор |
| DELETE | /products/{id}/versions/{v}/modifiers/{groupId} | Отвязать модификатор |
| PATCH | /products/{id}/versions/{v}/modifiers/{groupId} | Обновить override |
Удалить эндпоинты
| Method | Path | Причина |
|---|---|---|
| POST | /catalog/versions/{id}/products/{pId}/modifiers | Перенесено в конструктор товара |
| DELETE | /catalog/versions/{id}/products/{pId}/modifiers/{gId} | Перенесено |
| PATCH | /catalog/versions/{id}/products/{pId}/modifiers/{gId} | Перенесено |
Изменить эндпоинты
GET /catalog/versions/{id}/products/{pId} — response теперь включает модификаторы из product_version_modifiers (читает по product_id + product_version из catalog_version_products).
Ролевой доступ
| Роль | Конструктор товара | Конструктор каталога |
|---|---|---|
| Франшиза | CRUD версий, управление модификаторами | Добавление/удаление товаров, выбор версий |
| Франчайзи | Просмотр (published версии) | Просмотр (published каталог) |
| Менеджер | Просмотр | Просмотр |
| Кассир | Нет доступа | Нет доступа |
Структура фронта
Sidebar
├── Каталог
│ ├── Товары ← справочник + конструктор товара (ОБНОВЛЁН)
│ ├── Модификаторы ← справочник групп (без изменений)
│ └── Версии ← конструктор каталога (УПРОЩЁН)
Навигация
- Список товаров
/catalog/products→ клик на товар → Конструктор товара/catalog/products/{id} - В конструкторе каталога → кнопка “Перейти к товару” → Конструктор товара
Миграция данных
При деплое:
- Создать таблицу
product_version_modifiers - Перенести данные из
catalog_version_product_modifiers:- Для каждой привязки:
catalog_version_products.product_id+catalog_version_products.product_version+ modifier info → insert вproduct_version_modifiers - Дедупликация: если одинаковый товар@версия в разных каталогах имеет разные модификаторы — взять из последнего published каталога
- Для каждой привязки:
- Удалить таблицу
catalog_version_product_modifiers
Что НЕ входит
- Привязка техкарт — BR 1.9
- Привязка прейскуранта к товару — BR 1.10
- Доступность по ТТ — BR 1.10