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}