BR 1.7.2: Конструктор каталога — категории внутри версий

Корректировка к BR 1.7 и BR 1.7.1

Упрощает UX: убирает отдельный раздел “Категории”, переносит управление категориями внутрь конструктора версий каталога.

Проблема

Текущий UX (BR 1.7 + 1.7.1) использует 3 раздела в sidebar: Товары, Категории, Версии. Flow запутанный: создаёшь категорию → идёшь в товар → привязываешь → потом в версии → публикуешь. Три раздела для одного логического действия.

Решение

Убрать раздел “Категории” из sidebar. Оставить 2 раздела:

Sidebar:
├── Каталог
│     ├── Товары        ← справочник (CRUD товаров + версии)
│     └── Версии        ← конструктор (категории + состав + публикация)

Ключевое изменение: категория — свойство каталога, не товара

Было (BR 1.7): товар имеет category_id как обязательное поле. Стало: товар НЕ имеет категории. Категория — привязка внутри конкретной версии каталога.

Товар "Маргарита" (справочник):
  - Название, описание, тип, цена, ед.изм.
  - НЕТ категории

Каталог v3 (черновик):
  └── Категория "Пицца"
        └── Маргарита@v2  ← категория задаётся здесь

Один товар может быть в разных категориях в разных версиях каталога.


Раздел “Товары” (/catalog/products)

Справочник товаров — чистая работа с “атомами”:

  • Создать товар: название, описание, тип (dish/good), базовая цена, ед. измерения. Без категории.
  • Редактировать → новая версия товара
  • Просмотр карточки + история версий (таб “Версии”)
  • Удалить / восстановить
  • Архивные и опубликованные версии товаров — readonly (максимум: создать дубль для удобства)

Что убрано из формы товара

  • Поле “Категория” — убрано. Категория назначается только в конструкторе каталога.

Раздел “Версии” (/catalog/versions) — Конструктор

Список версий

Таблица: версия, статус, дата, кол-во товаров, кол-во категорий. Кнопки: “Создать черновик” / “Удалить черновик” / “Опубликовать”.

Просмотр (published / archived)

Readonly. Слева дерево категорий, справа товары выбранной категории.

Конструктор черновика (draft)

Полноценный конструктор — один экран, две панели:

┌─────────────────────────────────────────────────────┐
│ Черновик каталога v3                 [Опубликовать]  │
├────────────────┬────────────────────────────────────┤
│ Категории      │ Товары в "Горячее"                 │
│                │                                    │
│ ▾ Еда          │ Маргарита v2  [v1▾v2▾] [Убрать]   │
│   ▸ Горячее ←  │ Пепперони v1  [v1▾]    [Убрать]   │
│   ▸ Салаты     │                                    │
│ ▾ Напитки      │ [+ Добавить товар]                 │
│   ▸ Кофе       │                                    │
│                │                                    │
│ [Без категории]│ ← вкладка для неразмещённых        │
│                │                                    │
│ [+ Категория]  │                                    │
└────────────────┴────────────────────────────────────┘

Левая панель: дерево категорий

  • Дерево с неограниченной вложенностью
  • Inline CRUD: добавить корневую, добавить дочернюю, переименовать, удалить, вкл/выкл
  • Каскадная деактивация (как в BR 1.7)
  • Удаление: блокируется если есть товары внутри
  • “Без категории” — специальный пункт внизу дерева, показывает товары добавленные в каталог но ещё не привязанные к категории

Правая панель: товары выбранной категории

При клике на категорию слева → справа таблица товаров этой категории:

КолонкаДанные
НазваниеИз выбранной версии товара
ТипБейдж dish/good
ЦенаИз выбранной версии
ВерсияDropdown для переключения (v1, v2…)
Действия”Убрать” из каталога

“Добавить товар” — кнопка над таблицей:

  1. Модалка: выбрать товар из справочника (поиск)
  2. Выбрать версию товара
  3. Товар добавляется в текущую выбранную категорию
  4. Если категория не выбрана (клик на “Без категории”) — товар добавляется без категории

Переместить товар между категориями:

  • Phase 2: drag-and-drop
  • MVP: “Убрать” из одной категории → “Добавить” в другую (или контекстное меню “Переместить в…“)

Что меняется относительно BR 1.7 / 1.7.1

АспектBR 1.7 / 1.7.1BR 1.7.2
SidebarТовары + Категории + ВерсииТовары + Версии
КатегорииОтдельный разделВнутри конструктора версий
category_id в товареОбязательное полеУбрано. Категория = свойство каталога
Форма создания товараС выбором категорииБез категории
Конструктор черновикаТолько товары (добавить/убрать/переключить версию)Товары и категории (полный конструктор)
“Без категории”НетВкладка в дереве для неразмещённых товаров

Ролевой доступ

Без изменений от BR 1.7:

РольТоварыВерсии (конструктор)
ФраншизаCRUDПолный доступ (создать/удалить черновик, конструктор, публикация)
ФранчайзиПросмотр publishedНет доступа
МенеджерПросмотр publishedНет доступа
КассирНет доступаНет доступа

API изменения (нужно обновить контракты)

ИзменениеДетали
POST /productsУбрать category_id из request body
PATCH /products/{id}Убрать category_id
GET /productsУбрать category_id из response
catalog_version_productsДобавить category_id — привязка товара к категории внутри версии
POST /catalog/versions/{id}/productsДобавить category_id в request
PATCH /catalog/versions/{id}/products/{productId}Добавить возможность менять category_id
GET /categoriesВсегда в контексте версии каталога (GET /catalog/versions/{id}/categories)
POST/PATCH/DELETE /categoriesТолько внутри черновика (POST /catalog/versions/{id}/categories)

Ссылки