BR 1.7.2: Конструктор каталога — категории внутри версий
Упрощает 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…) |
| Действия | ”Убрать” из каталога |
“Добавить товар” — кнопка над таблицей:
- Модалка: выбрать товар из справочника (поиск)
- Выбрать версию товара
- Товар добавляется в текущую выбранную категорию
- Если категория не выбрана (клик на “Без категории”) — товар добавляется без категории
Переместить товар между категориями:
- Phase 2: drag-and-drop
- MVP: “Убрать” из одной категории → “Добавить” в другую (или контекстное меню “Переместить в…“)
Что меняется относительно BR 1.7 / 1.7.1
| Аспект | BR 1.7 / 1.7.1 | BR 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) |