Skip to content

refactor(cart-customer): thin Cart/Customer facades via Services managers - #406

Open
Ibochkarev wants to merge 6 commits into
betafrom
feat/issue-362-cart-customer-facade
Open

refactor(cart-customer): thin Cart/Customer facades via Services managers#406
Ibochkarev wants to merge 6 commits into
betafrom
feat/issue-362-cart-customer-facade

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Вынес пайплайны мутаций корзины и работы с покупателем из толстых facade Controllers/Cart/Cart.php и Controllers/Customer/Customer.php в сервисы по образцу Order + managers. Web API ($ms3->cart / $ms3->customer) и события (msOnBeforeAddToCart, customer events) сохранены.

Новые сервисы: CartMutationHandler, CustomerFieldManager, CustomerOrderResolver. Регистрация DI: ms3_cart_mutation_handler, ms3_customer_field_manager, ms3_customer_order_resolver. Status для ответов мутаций корзины считает handler; facade только синхронизирует draft/cart.

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

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

Связанные Issues

Closes #362

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

  • Ручное тестирование
  • Автоматические тесты (PHPStan, ESLint)
  • Тестирование на разных версиях PHP/MODX

Команды (Gate E):

  • php -l по затронутым PHP — exit 0
  • php tests/CartCustomerFacadeStructureTest.php — exit 0 (длина facade-методов ≤55, ключи DI, events/status в Services)

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

  • MiniShop3: ветка feat/issue-362-cart-customer-facade
  • MODX: n/a (структурный тест без runtime MODX)
  • PHP: 8.2+

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

До После

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en)
  • PHPStan проходит без новых ошибок
  • ESLint проходит без ошибок (для JS/Vue изменений)
  • Обновлён CHANGELOG.md (для значимых изменений)

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

  • Rename Controllers/*Domain/* намеренно вне scope (как в issue).
  • Review: code-reviewer / thermo-nuclear / security-review / silent-failure-hunter — blockers нет; исправлены placeholder count и ownership status в handler.
  • Известный pre-existing риск auto-login по email при checkout не менялся (см. security notes).

@Ibochkarev Ibochkarev added priority: high Важно исправить в ближайшее время enhancement New feature or request tech-debt Maintainability / refactor / architecture debt labels Jul 16, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 July 16, 2026 04:59
@Ibochkarev
Ibochkarev force-pushed the feat/issue-362-cart-customer-facade branch 6 times, most recently from d95b351 to ed2198d Compare July 29, 2026 11:33
@Ibochkarev
Ibochkarev force-pushed the feat/issue-362-cart-customer-facade branch from a2d4053 to 3519b77 Compare August 1, 2026 09:32
Move cart mutations and customer field/order resolution out of Controllers
facades so they match the Order + managers pattern without breaking web API.
Drop redundant is_numeric on int cart id; use getOrder() instead of magic order property.
@Ibochkarev
Ibochkarev force-pushed the feat/issue-362-cart-customer-facade branch from 3519b77 to 47b6169 Compare August 2, 2026 02:34
Fix PHP 8.2 fatal when modX stub declares typed lexicon().
Anonymous subclasses must not redeclare parent properties with types
when ModxStub uses untyped $services (PHP 8.2 fatal).
Drop typed $services/$lexicon on anonymous modX subclasses when
ModxStub already declares untyped parent properties.
Cart facade delegates mutations; integration harness must wire the handler.
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 Важно исправить в ближайшее время tech-debt Maintainability / refactor / architecture debt

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Cart/Customer: thin facade по образцу Order (Events + managers)

1 participant