Skip to content

refactor(orders): decompose OrdersController + ServiceRegistry factory map - #492

Merged
biz87 merged 4 commits into
betafrom
feat/issue-338-345-orders-registry
Aug 12, 2026
Merged

refactor(orders): decompose OrdersController + ServiceRegistry factory map#492
biz87 merged 4 commits into
betafrom
feat/issue-338-345-orders-registry

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Декомпозиция OrdersController (#338): list/mutation/products/presenter вынесены в ManagerOrder* сервисы, контроллер — тонкий HTTP-слой с Response. Рефакторинг ServiceRegistry (#345): явная карта фабрик ServiceRegistryFactories вместо switch/in_array для wiring; зарегистрированы manager order сервисы и ms3_extra_fields.

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

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

Связанные Issues

Closes #338
Closes #345

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

php -l core/components/minishop3/src/Controllers/Api/Manager/OrdersController.php
php -l core/components/minishop3/src/ServiceRegistry.php
php -l core/components/minishop3/src/ServiceRegistryFactories.php
# exit 0

cd core/components/minishop3 && composer test:smoke
# OK smoke tests (27), включая ManagerOrdersDecompositionTest, ServiceRegistryFactoryMapTest
  • Ручное тестирование
  • Автоматические тесты (composer test:smoke)
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: ветка feat/issue-338-345-orders-registry
  • MODX: n/a (smoke без полной установки)
  • PHP: 8.2+

Скриншоты (если применимо)

До После
OrdersController ~1804 LOC ~404 LOC

Чеклист

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

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

#338 AC

Критерий Результат
OrdersController < 1000 строк 404 LOC (smoke)
mgr REST без breaking changes envelope сохранён; deleteProductdata: null
Нет новой логики в manager.php closures n/a
php -l + smoke exit 0

#345 AC

Критерий Результат
Нет switch/in_array wiring ServiceRegistryFactoryMapTest
Orders/ExtraFields в $modx->services 50 factories = defaultServices keys
Boot без регрессий smoke green

Новые DI-ключи

ms3_manager_order_presenter, ms3_manager_order_list, ms3_manager_order_mutation, ms3_manager_order_products, ms3_manager_order_cost_recalculator, ms3_extra_fields

Follow-up (не блокирует)

  • Вынести getLogs / finalize / recalculateCost оркестрацию из контроллера
  • Shared success/error/getOrderLog base для mutation/products
  • GridConfigControllerManagerOrderListService::getDirectFilterKeys()

@Ibochkarev Ibochkarev added priority: high Важно исправить в ближайшее время priority: medium Средний приоритет enhancement New feature or request tech-debt Maintainability / refactor / architecture debt labels Jul 30, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 July 30, 2026 04:01
@Ibochkarev
Ibochkarev force-pushed the feat/issue-338-345-orders-registry branch 4 times, most recently from dd980ca to 19acf97 Compare August 7, 2026 18:43
@Ibochkarev
Ibochkarev force-pushed the feat/issue-338-345-orders-registry branch 7 times, most recently from c84b326 to 61d010e Compare August 10, 2026 18:42
@biz87

biz87 commented Aug 11, 2026

Copy link
Copy Markdown
Member

Спасибо! Это последний крупный в цикле — держим его на конец, как ты и планировал. Перед мержем нужен ребейз на финальную beta: за цикл в OrdersController и ServiceRegistry влилось много, и декомпозиция (+2010/−1629) с ними конфликтует.

Что нужно сохранить/свести при декомпозиции:

OrdersController:

ServiceRegistry (factory-map этого PR пересекается с реестром — нужен union регистраций):

После ребейза провалидирую по полному протоколу: PHPStan + smoke + PHPUnit, особое внимание ServiceRegistryDiTest (все DI-ключи резолвятся) и order-тестам (#459 pair, #469 stats/JOIN). Как будет готово на финале — вольём.

…egistry factories

Extract list/mutation/products/presenter services to shrink OrdersController
below 1k LOC; register manager order services in DI. Replace ServiceRegistry
switch/in_array wiring with explicit ServiceRegistryFactories map.
… split

Port #459 validateDeliveryPaymentPair into ManagerOrderMutationService,
register ms3_payment_link_resolver in ServiceRegistryFactories (#458),
and point DeliveryPaymentAvailabilityTest at the mutation service.
Point ServiceRegistryDiTest at the extracted factory map and resolve
ManagerOrderCostRecalculator only via ms3_manager_order_cost_recalculator.
@Ibochkarev
Ibochkarev force-pushed the feat/issue-338-345-orders-registry branch from 61d010e to 2c1b74f Compare August 12, 2026 00:50
@Ibochkarev

Copy link
Copy Markdown
Member Author

Rebase на актуальную beta выполнен (по комментарию @biz87).

Что сохранено при сведении

Gates

php tests/ServiceRegistryDiTest.php              # OK
php tests/ServiceRegistryFactoryMapTest.php      # OK (68)
php tests/ManagerOrdersDecompositionTest.php     # OK (412 lines)
php tests/DeliveryPaymentAvailabilityTest.php    # OK
composer test:smoke                              # OK (69)

OrdersController после декомпозиции: 412 LOC.

@biz87
biz87 merged commit 6358105 into beta Aug 12, 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: high Важно исправить в ближайшее время priority: medium Средний приоритет tech-debt Maintainability / refactor / architecture debt

Projects

None yet

2 participants