Skip to content

feat(web-api): публичные delivery/list и payment/list - #586

Open
Ibochkarev wants to merge 2 commits into
betafrom
feat/issue-568-569-delivery-payment-list
Open

feat(web-api): публичные delivery/list и payment/list#586
Ibochkarev wants to merge 2 commits into
betafrom
feat/issue-568-569-delivery-payment-list

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Публичный discovery методов доставки и оплаты для headless/Nuxt checkout без Manager API.

  • GET /api/v1/delivery/list (+ get/{id}) — активные доставки, allowlist без properties/class/сырого validation_rules; опционально payment_ids и required_fields (только имена).
  • GET /api/v1/payment/list (+ get/{id}) — активные оплаты; фильтр delivery_id только для активной доставки; опционально delivery_ids.
  • Префиксы в TokenMiddleware::$publicRoutes; маршруты вне tokened /order.
  • Связи delivery↔payment батчатся через CheckoutMemberMap (без N+1 на list).

Итоговая стоимость и redirect по-прежнему через order/cost/* и order/submit.

Тип изменений

  • Новая функциональность (non-breaking change)

Связанные Issues

Closes #568
Closes #569

Как это было протестировано?

Gate E:

php -l …DeliveryCatalogService.php PaymentCatalogService.php CheckoutMemberMap.php Controllers…
# exit 0
php tests/DeliveryCatalogServiceTest.php          # OK
php tests/PaymentCatalogServiceTest.php           # OK
php tests/CheckoutMemberMapTest.php               # OK
php tests/DeliveryPaymentCatalogRoutesTest.php    # OK
php tests/TokenMiddlewarePublicRoutesTest.php     # OK
composer test:smoke                               # OK smoke tests (80), exit 0
  • Автоматические тесты (composer test:smoke + focused allowlist/routes)
  • Ручное тестирование на живом MODX (list/get + payment?delivery_id=inactive)

Конфигурация тестирования:

  • MiniShop3: ветка feat/issue-568-569-delivery-payment-list от beta
  • PHP: 8.x локально

Чеклист

  • Код соответствует стилю проекта
  • Лексиконы ru+en (ms3_err_delivery_id_required, ms3_err_payment_id_required)
  • Существующие order/mgr endpoints не менялись по контракту
  • PHPStan — CI job
  • CHANGELOG — не трогали (релизный процесс)

Дополнительные заметки

Review loop: security medium (inactive delivery_id enumeration) и thermo N+1 закрыты preload-картой + isActiveDelivery. Docs.modx.pro — отдельно при релизе.

Add GET /api/v1/delivery|payment list/get with hard allowlists so headless checkouts can discover active methods without Manager API or leaking gateway properties.
@Ibochkarev Ibochkarev added enhancement New feature or request priority: medium Средний приоритет labels Aug 16, 2026
PHPStan stubs type select() as string-only; use comma-separated column lists in CheckoutMemberMap.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: medium Средний приоритет

Projects

None yet

1 participant