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:
StopListServicegetStopList(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 endpointsGET /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