BR 1.8 — Catalog Service

Модификаторы товаров: справочник групп, версионирование, привязка к товарам в каталоге.

Контракты

  • API — 10 новых endpoints (7 справочник + 3 привязка)
  • Data Model — 4 новых таблицы

Задачи

Миграции

  • Таблица modifier_groups (id, franchise_id, name, type, min_amount, max_amount, status, version, deleted_at, timestamps)
  • Таблица modifier_options (id, modifier_group_id FK, name, base_price, min_amount, max_amount, default_amount, display_order, timestamps)
  • Таблица modifier_group_versions (id, modifier_group_id FK, version, name, type, min_amount, max_amount, status, created_at). UNIQUE(modifier_group_id, version)
  • Таблица catalog_version_product_modifiers (id, catalog_version_id FK, product_id FK, modifier_group_id FK, modifier_group_version, override_min_amount, override_max_amount). UNIQUE(catalog_version_id, product_id, modifier_group_id)

Entity

  • ModifierGroup — id, franchiseId, name, type, minAmount, maxAmount, status, version, deletedAt, timestamps
  • ModifierOption — id, modifierGroupId, name, basePrice, minAmount, maxAmount, defaultAmount, displayOrder, timestamps
  • ModifierGroupVersion — id, modifierGroupId, version, name, type, minAmount, maxAmount, status, createdAt
  • CatalogVersionProductModifier — id, catalogVersionId, productId, modifierGroupId, modifierGroupVersion, overrideMinAmount, overrideMaxAmount

Repository

  • ModifierGroupRepository — findByFranchiseIdAndNameNotDeleted, findFiltered (пагинация/поиск)
  • ModifierOptionRepository — findByModifierGroupId, deleteByModifierGroupId
  • ModifierGroupVersionRepository — findByModifierGroupIdOrderByVersionDesc, findByModifierGroupIdAndVersion
  • CatalogVersionProductModifierRepository — findByCatalogVersionIdAndProductId, findByCatalogVersionIdAndProductIdAndModifierGroupId, deleteByCatalogVersionId, findByModifierGroupId

DTO

  • Request: CreateModifierGroupRequest (name, type, min/max, options[]), UpdateModifierGroupRequest, AttachModifierRequest (modifier_group_id, version, override_min/max), UpdateModifierAttachmentRequest
  • Response: ModifierGroupResponse (с опциями), ModifierGroupListItem, ModifierGroupVersionResponse (с catalog_versions), ModifierAttachmentResponse

ModifierGroupService

  • listGroups() — пагинация, поиск, фильтры (Franchise: все, другие: published)
  • getGroup() — детали + опции
  • createGroup() — создать группу + опции + version snapshot
  • updateGroup() — обновить (новая версия, опции заменяются целиком) + version snapshot
  • deleteGroup() — soft delete
  • restoreGroup() — восстановление
  • getGroupVersions() — история версий + привязка к каталогам

ModifierGroupController

  • GET /modifier-groups — listGroups
  • GET /modifier-groups/{id} — getGroup
  • POST /modifier-groups — createGroup
  • PATCH /modifier-groups/{id} — updateGroup
  • DELETE /modifier-groups/{id} — deleteGroup
  • POST /modifier-groups/{id}/restore — restoreGroup
  • GET /modifier-groups/{id}/versions — getGroupVersions

CatalogVersionService — привязка модификаторов

  • attachModifierToProduct() — привязать группу к товару в draft
  • detachModifierFromProduct() — отвязать
  • updateModifierAttachment() — обновить version/override
  • createDraft() — копировать modifier привязки из published
  • getProductsForVersion() — включить модификаторы в response

CatalogVersionController — привязка endpoints

  • POST /catalog/versions/{id}/products/{productId}/modifiers
  • DELETE /catalog/versions/{id}/products/{productId}/modifiers/{groupId}
  • PATCH /catalog/versions/{id}/products/{productId}/modifiers/{groupId}