Files
g2s-aggregator/spec/tasks/038_route_init_payment_by_provider.md
T

3.0 KiB

id, title, status, created
id title status created
038 Route init-payment validation and registration by provider TODO 2026-05-30

Context

С появлением второго провайдера CSE AggregatorService должен выбирать адаптер валидации цены и регистрации заказа по провайдеру выбранного тарифа. Сейчас сервис жёстко использует единственный CDEK-адаптер. Поле provider уже присутствует в DeliveryPrice/SystemDataTariff. Регистрация заказа выполняется при уведомлении об оплате TBank. Поллинг статуса и email в этой задаче не затрагиваются.

Goal

Маршрутизировать валидацию цены и регистрацию заказа по request.system_data.tariff.provider, подключить CSEProvider в DI рядом с CDEK, сохранять выбранного провайдера и номер заказа CSE в persistence.

Constraints

  • Controller вызывает Service без бизнес-ветвления.
  • Service не содержит чистых бизнес-правил; маршрутизация — оркестрация.
  • Не изменять контракт API, кроме уже обобщённого tariff_code.
  • Колонки cdek_* не изменять; добавить provider и cse_order_number миграцией.
  • Не изменять файлы в spec/.

Acceptance criteria

  • GET /api/v1/delivery/calculate возвращает агрегированные тарифы CDEK и CSE.
  • AggregatorService выбирает адаптер валидации/регистрации по имени провайдера тарифа; общий тип результата регистрации не привязан к CDEK.
  • При оплате заказа с тарифом CSE регистрация выполняется через CSEProvider; в orders сохранены provider и cse_order_number.
  • DI в контроллере доставки инстанцирует и подключает CSEProvider.

Definition of Done

  • AggregatorService маршрутизирует по провайдеру (mapping адаптеров).
  • Обобщён тип результата регистрации заказа.
  • Модель Order и репозиторий дополнены (provider, cse_order_number, mark_cse_order_registered); добавлена миграция.
  • DI контроллера подключает CDEK и CSE.
  • Тесты маршрутизации валидации/регистрации по провайдеру проходят.

Tests

  • Service unit-тесты маршрутизации (моки CDEK/CSE адаптеров).
  • Тесты persistence для provider/cse_order_number.

Commands

  • poetry run pytest tests/services -q