BR 1.7.1 — Catalog Service

Изменения в Catalog Service для независимого версионирования товаров и ручного управления черновиком каталога.

Контракты

  • API — 6 новых endpoints, 6 изменённых
  • Data Model — таблица product_versions

Задачи

Миграция

  • Новая миграция: таблица product_versions (id, product_id, version, name, description, type, base_price, unit_of_measure, category_id, status, created_at). UNIQUE(product_id, version). FK product_id → products(id) ON DELETE CASCADE.
  • Seed: для существующих товаров создать запись v1 в product_versions (backfill)

Товары — изменения в существующих эндпоинтах

  • POST /products — при создании записывать v1 в product_versions. Убрать автоматическое создание draft каталога и добавление товара в draft.
  • PATCH /products/{id} — при обновлении записывать новую версию в product_versions. Убрать автоматическое обновление ссылки в draft каталоге.
  • GET /products — Franchise: возвращать все товары франшизы (последняя версия), не привязанные к каталогу. Franchisee/Manager: без изменений (published).
  • GET /products/{id} — Franchise: любой товар. Franchisee/Manager: только из published.

Товары — новый эндпоинт

  • GET /products/{id}/versions — история версий товара из product_versions + join с catalog_version_products для привязки к каталогам. Сортировка: version DESC.

Каталог — новые эндпоинты

  • POST /catalog/versions — создать черновик (копия published: все catalog_version_products и catalog_version_categories). Ошибки: DRAFT_ALREADY_EXISTS, NO_PUBLISHED_VERSION.
  • DELETE /catalog/versions/{id} — удалить черновик. Ошибки: CATALOG_VERSION_NOT_FOUND, CANNOT_DELETE_NON_DRAFT.

Состав черновика — новые эндпоинты

  • POST /catalog/versions/{id}/products — добавить товар в черновик (product_id + product_version). Ошибки: CATALOG_VERSION_NOT_DRAFT, PRODUCT_NOT_FOUND, PRODUCT_VERSION_NOT_FOUND, PRODUCT_ALREADY_IN_CATALOG.
  • DELETE /catalog/versions/{id}/products/{productId} — убрать товар из черновика. Ошибки: CATALOG_VERSION_NOT_DRAFT, PRODUCT_NOT_IN_CATALOG.
  • PATCH /catalog/versions/{id}/products/{productId} — переключить версию товара. Ошибки: CATALOG_VERSION_NOT_DRAFT, PRODUCT_NOT_IN_CATALOG, PRODUCT_VERSION_NOT_FOUND.

Категории — изменения

  • POST /categoriesубрать auto-draft. Требовать наличия draft → иначе NO_DRAFT_VERSION (422).
  • PATCH /categories/{id}убрать auto-draft. Требовать draft.
  • DELETE /categories/{id} — требовать draft.