Skip to content

refactor(api): единый Response envelope на HTTP boundary - #505

Merged
biz87 merged 2 commits into
betafrom
feat/issue-341-response-envelope
Aug 10, 2026
Merged

refactor(api): единый Response envelope на HTTP boundary#505
biz87 merged 2 commits into
betafrom
feat/issue-341-response-envelope

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Сводит Manager/Web API к одному контракту на HTTP boundary: MiniShop3\Router\Response + HttpStatus.

Import/gallery вынесены из fat closures manager.php в контроллеры с Response::fromProcessor. Customer auth на Web использует тот же bridge. В Response.php зафиксирована таблица слоёв (domain MS2-array vs HTTP envelope vs legacy processors).

Перекрывает подход #437 (raw getResponse() → envelope). Extra-fields CRUD остаётся в #491 / #355.

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

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #341

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

Локальный CI-гейт (без полной установки MODX/MySQL), PHP lint + smoke + PHPUnit из .github/workflows/ci.yml:

cd core/components/minishop3
composer install
composer ci:php
# exit 0 — php -l 455 files, smoke 42 OK, PHPUnit 109 OK (4 deprecations pre-existing)
php tests/ImportGalleryConnectorEnvelopeTest.php   # exit 0
php tests/ResponseFromProcessorTest.php            # exit 0
php tests/CustomerAuthEndpointsTest.php            # exit 0

Vue не трогали. PHPStan локально не гоняли (нет .phpstan-deps); ожидается job CI.

  • Автоматические тесты (composer ci:php)
  • Ручное тестирование
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: branch feat/issue-341-response-envelope
  • MODX: n/a (smoke без MODX)
  • PHP: 8.4.17

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы не требуются
  • PHPStan проходит без новых ошибок (composer stan / CI job PHPStan)
  • ESLint n/a (Vue не менялся)
  • CHANGELOG.md — не трогали (релизный maintainer)

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

Контракты (кратко)

Слой Контракт
HTTP (Api controllers, routes, middleware) Response::* / fromProcessor
Domain (Cart/Order/Customer) MS2 {success,message,data}
Legacy processors bridge только через fromProcessor, не getResponse() в routes

AC #341

Критерий Статус
Тронутые mgr+web REST отдают Response да (import/gallery + CustomerAuth)
Zero getResponse() в config/routes/{manager,web}.php да (smoke)
Таблица контрактов docblock Router/Response.php + эта таблица

Follow-up

  • Extra-fields fat closures → #491
  • После merge можно закрыть #437 как superseded

@Ibochkarev Ibochkarev added priority: medium Средний приоритет enhancement New feature or request tech-debt Maintainability / refactor / architecture debt labels Aug 9, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 August 9, 2026 13:23
@Ibochkarev
Ibochkarev force-pushed the feat/issue-341-response-envelope branch 4 times, most recently from cbffc7a to 457d63e Compare August 10, 2026 08:50
Map processor bridges through Response::fromProcessor so connector Index
stops nesting raw getResponse() payloads, and document domain vs HTTP
contracts for contributors (#341).
Resolve processors_path via dirname from the trait, and apply PSR spacing
after function keywords in manager routes.
@Ibochkarev
Ibochkarev force-pushed the feat/issue-341-response-envelope branch from 457d63e to b9cbfef Compare August 10, 2026 09:09
@biz87
biz87 merged commit 68d231a into beta Aug 10, 2026
3 checks passed
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 Средний приоритет tech-debt Maintainability / refactor / architecture debt

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Единый Response envelope на HTTP boundary

2 participants