Aggregator Service
Зона ответственности
Единая точка интеграции ERP со сторонними маркетплейсами доставки (Яндекс.Еда, Маркет Деливери, в будущем — Chibbis, Broniboy, собственный сайт/мобильное приложение).
Service выполняет:
- Публикация меню и цен — формирует JSON-снапшот каталога в формате конкретного агрегатора, отдаёт по pull-запросу.
- Приём заказов — эндпоинт для входящих новых заказов от агрегатора, валидация, маппинг SKU, публикация события в Kafka.
- Синхронизация статусов — слушает
order.status.changed(Order Service) и ставит задачу вstatus_push_queue(StatusChangedConsumer). Фактический push в агрегатор выполняетStatusPushWorker— 🕓 не реализован в M2, ожидается в M3 (exponential backoff, retry до 5 раз). - Стоп-лист — из Warehouse Service / Catalog flag’а собирает список недоступных товаров, отдаёт агрегатору по pull.
- Подключение ТТ — хранение OAuth2 credentials, тест-запросы, управление подключением/отключением.
- Логирование — все 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.
Конфигурация
| Переменная | Значение |
|---|---|
PORT | 3013 |
POSTGRES_URL | aggregator_db схема в общем кластере |
KAFKA_BROKERS | общий брокер |
CATALOG_SERVICE_URL, STORE_SERVICE_URL, ORDER_SERVICE_URL | для межсервисных вызовов |
SERVICE_TOKEN | для X-Service-Token |
YANDEX_EDA_API_BASE | https://eda.yandex.ru/api/vendor/v1 (финальный URL — после договора) |
YANDEX_EDA_OAUTH_URL | endpoint для обмена credentials → access_token |