sequenceDiagram
autonumber
participant K as Kafka: ...product.templated
participant Fridge as fridge-service
participant DB as PostgreSQL (fridge_db)
K->>Fridge: Шаг 8: Handler: MutateFridgeBalances()
activate Fridge
Note over Fridge: Шаг 8.1: Выделение граммов/литров,<br/>игнорирование ценовых параметров
Fridge->>DB: Шаг 8.2: SQL: INSERT/UPDATE fridge_inventory
deactivate Fridge
Метод (Event Handler) MutateFridgeBalances
Домен: INVENTORY | Сервис: fridge-service | Тип: Kafka Consumer
Общее описание
Асинхронный метод-обработчик (Event Handler) MutateFridgeBalances развернут внутри микросервиса fridge-service. Он отвечает за физическое зачисление продуктов в виртуальный холодильник конкретной домашней группы. Метод изолирован от цен и финансовых метрик — его целевая задача заключается в калькуляции объемов и веса доступной еды.
Критические задачи метода
- Метрический поштучный разбор: Выделение чистых физических объемов (граммы, литры, штуки) и нормализация наименований для инвентарного учета.
- Прямое обновление баланса (Direct Update): Немедленная фиксация продуктовых остатков в таблице холодильника. Цена и FIFO-индексы в рамках данной логики не рассчитываются и не сохраняются.
Протокол взаимодействия (Event Contract)
- Имя метода:
MutateFridgeBalances - Брокер сообщений:
Apache Kafka - Входной топик (Subscription):
bpds.mdm.out.product.templated - Формат данных:
application/json
Диаграмма последовательности (Инвентарный поток)
Расшифровка шагов метода по канону
| Шаг | Действие | Параметры / Запросы / DTO | Ошибки (Исключения / Статусы) |
|---|---|---|---|
8 (K -> Fridge) |
Сервис физического инвентаря вычитывает из топика дистрибуции шаблон с продуктами для зачисления на баланс группы. | Kafka Ingress Payload:{ "trace_id": "req-manual-text-99aa", "home_group_id": "group_abc123", "parsed_items": [{ "product_name": "Молоко Юрта", "volume_liters": 1.5 }] } |
Бизнес-ошибки отсутствуют |
8.1 (Fridge -> Fridge) |
Внутренняя логика: Парсинг объемов товара, нормализация штук/граммов для инвентарной карточки. Поля стоимости намеренно игнорируются. | Внутренний метод:InventoryParser.normalize(payload.parsed_items) |
IAD-FRG-422 (ошибка нормализации, невозможно определить физический объем или количество товара) |
8.2 (Fridge -> DB) |
Сервис выполняет операцию сохранения/обновления остатков еды в таблице физического инвентаря холодильника группы без использования FIFO-индексов. | SQL-запрос:INSERT INTO fridge_inventory (group_id, item_name, volume) VALUES ('group_abc123', 'Молоко Юрта', 1.5) ON CONFLICT (group_id, item_name) DO UPDATE SET volume = fridge_inventory.volume + 1.5; |
Бизнес-ошибки отсутствуют |