Skip to content

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

Open
Ibochkarev wants to merge 2 commits into
betafrom
feat/issue-338-345-orders-registry
Open

refactor(orders): decompose OrdersController + ServiceRegistry factory map#492
Ibochkarev wants to merge 2 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()

…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.
@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
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

1 participant