BR 1.7 → Catalog Service
Репозиторий: erp-catalog-service (нужно создать)
Контракты: API, Data Model
Задачи
Инфраструктура
- Создать репозиторий
erp-catalog-serviceна GitHub - Инициализация проекта: Maven, Spring Boot 3, PostgreSQL, Liquibase
- Liquibase: таблица
catalog_versions(id, franchise_id, version_number, status, published_at, archived_at, created_at) - Liquibase: таблица
categories(id, franchise_id, name, parent_id, display_order, is_active, version, created_at, updated_at) - Liquibase: таблица
catalog_version_categories(catalog_version_id, category_id, category_version) - Liquibase: таблица
products(id, franchise_id, name, description, type, base_price, unit_of_measure, category_id, status, version, deleted_at, created_at, updated_at) - Liquibase: таблица
catalog_version_products(catalog_version_id, product_id, product_version) - Liquibase: индексы (unique name per franchise, parent_id, category_id, status)
- Entity: CatalogVersion, Category, CatalogVersionCategory, Product, CatalogVersionProduct
- Repository для каждой entity
Security
- JWT filter (HS256 + shared secret) — ADR-001
- Service Token filter для internal endpoints (если потребуются)
Бизнес-логика
- Двухуровневое версионирование: auto-create draft при изменении товара/категории
- Публикация каталога: draft → published, старый published → archived
- Категории: дерево (adjacency list), каскадная деактивация
- Товары: версионирование (каждое изменение = новая версия)
- Товары: soft delete + restore
- Уникальность названия товара (NAME_DUPLICATE per franchise)
- Ролевой доступ: Franchise видит draft, Franchisee/Manager видят published
Эндпоинты — Каталог
-
GET /api/v1/catalog/versions— список версий -
GET /api/v1/catalog/versions/{id}— детали версии -
POST /api/v1/catalog/publish— опубликовать draft -
GET /api/v1/catalog/published— published каталог (для клиентов)
Эндпоинты — Категории
-
GET /api/v1/categories— дерево (draft/published по роли) -
POST /api/v1/categories— создать -
PATCH /api/v1/categories/{id}— обновить -
DELETE /api/v1/categories/{id}— удалить (проверка детей/товаров)
Эндпоинты — Товары
-
GET /api/v1/products— список (draft/published по роли, пагинация, фильтры) -
GET /api/v1/products/{id}— детали -
POST /api/v1/products— создать (в draft) -
PATCH /api/v1/products/{id}— обновить (новая версия товара) -
DELETE /api/v1/products/{id}— soft delete -
POST /api/v1/products/{id}/restore— восстановить
Docker
- Dockerfile (multi-stage Maven + JRE)
- docker-compose.yml (PostgreSQL на порту 3004)
Тип
ingredientотложен. На MVP только dish/good.