BUG-025: Декомпозиция
Перед реализацией — выбрать модель склада
В
Баг.mdописаны три варианта (A — автосоздание 1:1, B — полноценный раздел «Склады» по YumaPOS, C — только UI-кнопка на карточке ТТ). Декомпозиция ниже написана под вариант A как минимальный фикс. Если выбираем B — эта декомпозиция меняется на отдельный BR.
Код
Store Service
- Публиковать Kafka-событие
store.createdпри создании ТТ (payload:store_id,franchise_id,name,created_at) - Если Kafka ещё не подключена к Store Service для прочих событий — альтернатива: синхронный HTTP-вызов
POST /api/v1/internal/warehouses/from-storeв Warehouse Service в той же транзакции. Согласовать с архитектурой (обычно Kafka предпочтительнее)
Warehouse Service
- Добавить
@KafkaListenerна топикstore.created→ создаётwarehousesсname = "Склад " + store.name,status = active. Идемпотентно — по unique(franchise_id, store_id) - Либо (альтернатива): добавить internal endpoint
POST /api/v1/internal/warehouses/from-storeс проверкойX-Service-Token, вызываемый Store Service’ом - Backfill-скрипт (одноразовая миграция): для всех существующих ТТ, где нет склада в
warehouses— создать склад с дефолтным именем. Выполнить при деплое
Admin Franchise (web)
- На карточке ТТ (
/stores/:id) — блок «Склад» с именем и кнопкой «Переименовать» (опционально) - Обработка ошибки «Склад не найден» при создании приёмки/списания: вместо голого сообщения — подсказка «Склад для ТТ не создан, обратитесь к администратору» (страховка на случай если бэкфилл что-то упустил)
Спеки
-
08-Specs/Админка Франшизы/Торговые точки.md— добавить правило: «При создании ТТ автоматически создаётся склад с именем “Склад {store_name}”» -
08-Specs/Админка Франшизы/Склад.md(новая, если нет) — описать модель: 1 ТТ = 1 склад, создаётся автоматически -
03-Services/Warehouse Service/Events.md— добавить потреблениеstore.created -
03-Services/Store Service/Events.md— добавить публикациюstore.created(payload) -
04-API Contracts/Event Schema Registry.md— зарегистрировать схемуstore.created - Пометить обновления в спеках
*(Исправлено в [[07-Tasks/Bugs/BUG-025 Склад не создаётся автоматически при создании ТТ/Баг|BUG-025]])*