Files
g2s-aggregator/spec/tasks/003_add_cdek_provider_adapter.md
T
Раис Юсупалиев 86dbd2bdd6 003 Add cdek
2026-03-07 14:57:16 +03:00

2.7 KiB
Raw Blame History

id, title, status, created
id title status created
003 Add CDEK provider adapter DONE 2026-03-07

Context

Phase 1 в spec/overview.md требует поддержку provider CDEK с OAuth2 authentication и маппингом расчёта тарифа.

Goal

Реализовать adapter interfaces и модули CDEK adapter: provider contract, OAuth2 token handling, HTTP client behavior, преобразование ответа в DeliveryPrice и чтение параметров CDEK из секции adapter YAML-конфига.

Constraints

  • Только Adapter layer; без business decisions и sorting logic.
  • Внешний IO должен оставаться внутри adapter modules.
  • Timeout для CDEK должен быть 10 секунд согласно specification.
  • Параметры CDEK (base_url, OAuth2 credentials, retry policy, timeout, cache TTL) должны приходить из секции adapter в .yaml конфиге.
  • Запрещён хардкод credentials и runtime-параметров адаптера.
  • Не изменять файлы в spec/.

Acceptance criteria

  • Существует интерфейс DeliveryProvider со стабильным контрактом get_price().
  • Модуль CDEK auth получает OAuth2 token через client credentials и переиспользует валидный token до истечения.
  • CDEK client выполняет tariff request с timeout и retry behavior.
  • CDEK mapper преобразует provider response в унифицированную schema DeliveryPrice.
  • Adapter наружу предоставляет только provider-facing API, необходимый Service.
  • Адаптер использует значения из секции adapter YAML-конфига, включая timeout_seconds=10 и cache_ttl_seconds=900 по умолчанию.

Definition of Done

  • Реализован base provider interface.
  • Реализованы модули CDEK auth/client/mapper.
  • CDEK adapter возвращает унифицированную price model при успешном ответе.
  • Adapter tests покрывают auth refresh, timeout/retry и mapping cases.

Tests

  • Добавить adapter unit tests для token lifecycle behavior.
  • Добавить adapter tests для response mapping и HTTP error handling.
  • Добавить tests, проверяющие применение параметров CDEK из секции adapter YAML-конфига.
  • Для внешних HTTP взаимодействий использовать stubs/mocks.

Commands

  • poetry run pytest tests/adapters/delivery_providers/cdek -q