Aggregator Service

Зона ответственности

Единая точка интеграции ERP со сторонними маркетплейсами доставки (Яндекс.Еда, Маркет Деливери, в будущем — Chibbis, Broniboy, собственный сайт/мобильное приложение).

Service выполняет:

  1. Публикация меню и цен — формирует JSON-снапшот каталога в формате конкретного агрегатора, отдаёт по pull-запросу.
  2. Приём заказов — эндпоинт для входящих новых заказов от агрегатора, валидация, маппинг SKU, публикация события в Kafka.
  3. Синхронизация статусов — слушает order.status.changed (Order Service) и ставит задачу в status_push_queue (StatusChangedConsumer). Фактический push в агрегатор выполняет StatusPushWorker — 🕓 не реализован в M2, ожидается в M3 (exponential backoff, retry до 5 раз).
  4. Стоп-лист — из Warehouse Service / Catalog flag’а собирает список недоступных товаров, отдаёт агрегатору по pull.
  5. Подключение ТТ — хранение OAuth2 credentials, тест-запросы, управление подключением/отключением.
  6. Логирование — все pull/push-запросы записываются для аудита и отладки.

Функции

  • CRUD подключений (binding) «наша ТТ ↔ ресторан в агрегаторе».
  • OAuth2 client (push запросы в агрегатор) + OAuth2 resource server (pull запросы от агрегатора).
  • Абстрактный интерфейс AggregatorConnector с реализациями per-аггрегатор (сначала YandexEdaConnector, затем MarketDeliveryConnector с другим baseUrl, и т.д.).
  • Маппинг наших статусов ↔ внешних (конфиг per-аггрегатор).
  • Идемпотентность приёма заказов (дедуп по external_order_id).
  • Retry + dead-letter для неудачных push.

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

ОперацияPermission
Подключить ТТ к агрегаторуstores.edit + integrations.manage
Просмотр логов / статуса интеграцииintegrations.read
Ручной re-sync меню / стоп-листаintegrations.manage
Просмотр входящих заказовorders.read

Зависимости

  • Catalog Service (HTTP /internal/catalog/menu) — источник меню для снапшота.
  • Store Service (HTTP /internal/stores/{id}) — данные ТТ + store_external_mappings таблица.
  • Order Service — создаёт заказы по событию aggregator.order.received, эмитит события о смене статуса.
  • Warehouse Service — Kafka события о стоп-листе.
  • Auth Service — валидация внутренних токенов.
  • Kafka — consumer/producer.
  • Redis — кэш снапшота меню (TTL = 1 час) чтобы не пересобирать на каждый pull.

Конфигурация

ПеременнаяЗначение
PORT3013
POSTGRES_URLaggregator_db схема в общем кластере
KAFKA_BROKERSобщий брокер
CATALOG_SERVICE_URL, STORE_SERVICE_URL, ORDER_SERVICE_URLдля межсервисных вызовов
SERVICE_TOKENдля X-Service-Token
YANDEX_EDA_API_BASEhttps://eda.yandex.ru/api/vendor/v1 (финальный URL — после договора)
YANDEX_EDA_OAUTH_URLendpoint для обмена credentials → access_token

Ссылки