Метод (Event Handler) MutateFridgeBalances

Домен: INVENTORY | Сервис: fridge-service | Тип: Kafka Consumer

Общее описание

Асинхронный метод-обработчик (Event Handler) MutateFridgeBalances развернут внутри микросервиса fridge-service. Он отвечает за физическое зачисление продуктов в виртуальный холодильник конкретной домашней группы. Метод изолирован от цен и финансовых метрик — его целевая задача заключается в калькуляции объемов и веса доступной еды.

Критические задачи метода

  1. Метрический поштучный разбор: Выделение чистых физических объемов (граммы, литры, штуки) и нормализация наименований для инвентарного учета.
  2. Прямое обновление баланса (Direct Update): Немедленная фиксация продуктовых остатков в таблице холодильника. Цена и FIFO-индексы в рамках данной логики не рассчитываются и не сохраняются.

Протокол взаимодействия (Event Contract)

  • Имя метода: MutateFridgeBalances
  • Брокер сообщений: Apache Kafka
  • Входной топик (Subscription): bpds.mdm.out.product.templated
  • Формат данных: application/json

Диаграмма последовательности (Инвентарный поток)

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


Расшифровка шагов метода по канону

Шаг Действие Параметры / Запросы / 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;
Бизнес-ошибки отсутствуют