BR 1.13 --- Catalog Service

Миграции

  • SL-CS-01: Создать таблицу product_stop_list

    • Колонки: id, franchise_id, store_id, product_id FK, reason, stopped_by, created_at
    • UNIQUE (store_id, product_id)
    • INDEX idx_psl_store_id (store_id)
    • FK product_id REFERENCES products(id) ON DELETE CASCADE
  • SL-CS-02: Создать таблицу category_stop_list

    • Колонки: id, franchise_id, store_id, category_id FK, reason, stopped_by, created_at
    • UNIQUE (store_id, category_id)
    • INDEX idx_csl_store_id (store_id)
    • FK category_id REFERENCES categories(id) ON DELETE CASCADE

Entity / Repository

  • SL-CS-03: Entity ProductStopList + ProductStopListRepository

    • findByStoreId, findByStoreIdAndProductId, deleteByStoreIdAndProductId
    • existsByStoreIdAndProductId
  • SL-CS-04: Entity CategoryStopList + CategoryStopListRepository

    • findByStoreId, findByStoreIdAndCategoryId, deleteByStoreIdAndCategoryId
    • existsByStoreIdAndCategoryId

Service

  • SL-CS-05: StopListService
    • getStopList(franchiseId, storeId) --- вернуть все остановленные товары и категории
    • stopProduct(franchiseId, storeId, productId, reason, stoppedBy) --- проверить существование товара, проверить дубликат (409), создать запись
    • unstopProduct(franchiseId, storeId, productId) --- проверить наличие записи (404), удалить
    • stopCategory(franchiseId, storeId, categoryId, reason, stoppedBy) --- проверить существование категории, проверить дубликат (409), создать
    • unstopCategory(franchiseId, storeId, categoryId) --- проверить наличие (404), удалить
    • checkProductAvailability(franchiseId, storeId, productId) --- проверить product_stop_list + category_stop_list (по category_id товара)

Controller

  • SL-CS-06: StopListController --- 6 endpoints
    • GET /stop-lists/stores/{storeId} --- список стоп-листа для ТТ
    • POST /stop-lists/stores/{storeId}/products --- остановить товар
    • DELETE /stop-lists/stores/{storeId}/products/{productId} --- снять стоп с товара
    • POST /stop-lists/stores/{storeId}/categories --- остановить категорию
    • DELETE /stop-lists/stores/{storeId}/categories/{categoryId} --- снять стоп с категории
    • GET /stop-lists/stores/{storeId}/check/{productId} --- проверить доступность товара

Ролевой доступ

  • SL-CS-07: Ролевая фильтрация по store_ids из JWT
    • Franchise --- доступ к любой ТТ по franchise_id
    • Franchisee --- только ТТ из store_ids JWT
    • Manager --- только своя ТТ из store_ids JWT
    • Cashier --- только GET (read-only), остальное 403

Ссылки