BUG-005: Structural модификаторы попадают в прейскурант

Описание

В ответе GET /price-lists/{id}/items structural модификаторы (размер пиццы) отображаются в секции unbound_modifiers. Structural модификаторы определяют вариант блюда и не имеют отдельной цены — они не должны быть в прейскуранте вообще. Цена варианта = цена товара (задаётся на товаре в прейскуранте).

Дополнительно: группа “Размер” осталась от удалённого товара и всё равно отображается.

Шаги воспроизведения

  1. Создать товар “Пепперони” с structural модификатором “Размер” (20/30/15 см)
  2. Удалить товар (soft delete)
  3. Открыть прейскурант → в unbound_modifiers видны “30 см”, “20 см”, “15 см”

Ожидаемое поведение

  • Structural модификаторы (binding_type = structural) не попадают в прейскурант — ни в modifier_options товаров, ни в unbound_modifiers
  • Модификаторы удалённых товаров не отображаются в прейскуранте

Фактическое поведение

"unbound_modifiers": [
  {
    "modifier_group_name": "Размер",
    "options": [
      { "modifier_option_name": "30 см", "price": 0 },
      { "modifier_option_name": "20 см", "price": 0 },
      { "modifier_option_name": "15 см", "price": 0 }
    ]
  }
]

Затронутые сервисы

  • Catalog ServicePriceListItemService — логика сборки ответа прейскуранта, фильтрация модификаторов по binding_type и статусу товара