BR 1.8.1: Конструктор товара и перенос привязки модификаторов

Зависит от:

Контекст

В BR 1.8 модификаторы привязываются к товару внутри конструктора каталога (таблица catalog_version_product_modifiers). Это создаёт проблемы:

  1. При каждом новом драфте каталога нужно заново настраивать модификаторы
  2. Модификаторы — это свойство товара (рецептура, состав), а не каталога (ассортимент)
  3. Нет единого места для управления товаром — версии, модификаторы, техкарты (будущее) разбросаны

Решение: перенести привязку модификаторов с уровня каталога на уровень версии товара. Создать конструктор товара — единый экран управления товаром и его версиями.


Что меняется

Было (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.

КолонкаТипОписание
iduuidPK
product_iduuidFK → products.id
product_versionintegerНомер версии товара
modifier_group_iduuidFK → modifier_groups.id
modifier_group_versionintegerСнимок версии группы
override_min_amountinteger NULLPer-product override min
override_max_amountinteger NULLPer-product override max
created_attimestamp

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

Новые эндпоинты (конструктор товара)

MethodPathОписание
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

Удалить эндпоинты

MethodPathПричина
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 каталог)
МенеджерПросмотрПросмотр
КассирНет доступаНет доступа

Структура фронта

├── Каталог
│     ├── Товары           ← справочник + конструктор товара (ОБНОВЛЁН)
│     ├── Модификаторы     ← справочник групп (без изменений)
│     └── Версии           ← конструктор каталога (УПРОЩЁН)

Навигация

  • Список товаров /catalog/products → клик на товар → Конструктор товара /catalog/products/{id}
  • В конструкторе каталога → кнопка “Перейти к товару” → Конструктор товара

Миграция данных

При деплое:

  1. Создать таблицу product_version_modifiers
  2. Перенести данные из catalog_version_product_modifiers:
    • Для каждой привязки: catalog_version_products.product_id + catalog_version_products.product_version + modifier info → insert в product_version_modifiers
    • Дедупликация: если одинаковый товар@версия в разных каталогах имеет разные модификаторы — взять из последнего published каталога
  3. Удалить таблицу catalog_version_product_modifiers

Что НЕ входит

  • Привязка техкарт — BR 1.9
  • Привязка прейскуранта к товару — BR 1.10
  • Доступность по ТТ — BR 1.10

Ссылки