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.