3.0 KiB
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