Skip to content

Заменить abandoned rakit/validation - #486

Open
Ibochkarev wants to merge 3 commits into
betafrom
feat/issue-342-replace-rakit-validation
Open

Заменить abandoned rakit/validation#486
Ibochkarev wants to merge 3 commits into
betafrom
feat/issue-342-replace-rakit-validation

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Удалена зависимость rakit/validation (unmaintained с ~2020). Валидация API и checkout переведена на собственный ValidationService с pipe-синтаксисом правил, совместимым с существующими JSON-правилами доставок и сессионными правилами клиента.

Новый слой:

  • MiniShop3\Services\Validation\ValidationService — canonical API (make / validate, errors()->firstOfAll())
  • PipeRuleValidator — движок pipe-правил (required, min/max, email, numeric, conditional rules, extension/mimes)
  • ValidationServiceLocator::fromModx() — единая точка получения сервиса из DI (ms3_validation_service)

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

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

Связанные Issues

Closes #342

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

cd core/components/minishop3
composer ci:php          # exit 0 (smoke 20 + phpunit 51 tests)
vendor/bin/phpunit tests/Unit/Services/Validation/ValidationServiceTest.php  # exit 0
php -l src/Services/Validation/*.php src/Controllers/Customer/Customer.php \
  src/Controllers/Api/Web/CustomerProfileController.php \
  src/Services/Order/OrderFieldManager.php  # exit 0

Покрыты сценарии: правила профиля клиента, поля заказа (delivery_id/payment_id), seed-правила доставки, custom messages, nullable, unsupported rule → fail.

  • Ручное тестирование
  • Автоматические тесты (composer ci:php / composer test, npm run lint:ci, composer stan / GitHub Actions CI)
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: branch feat/issue-342-replace-rakit-validation
  • MODX: n/a (unit/smoke без полного MODX)
  • PHP: 8.4.17

Чеклист

  • Код соответствует стилю проекта
  • Изменения не ломают существующую функциональность (pipe API и форма ошибок сохранены)
  • Лексиконы добавлены на двух языках (ru/en) — n/a, публичные сообщения не менялись
  • PHPStan — не запускался локально (CI)
  • ESLint — Vue: только комментарий в ValidationRulesEditor.vue
  • CHANGELOG.md — по политике репозитория не обновлялся

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

  • Прямых use Rakit\… в src/ больше нет.
  • Неизвестные правила в pipe-строке теперь дают ошибку валидации (fail-closed), а не проходят молча.

Remove unmaintained rakit/validation and route customer/order/profile
validation through a native pipe-rule adapter registered in DI.

Closes #342
@Ibochkarev Ibochkarev added dependencies Pull requests that update a dependency file priority: medium Средний приоритет enhancement New feature or request tech-debt Maintainability / refactor / architecture debt labels Jul 29, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 July 29, 2026 16:23
digits/digits_between now reject non-digit characters, and regex params
are no longer split on commas inside the pattern.
Replace ValidationServiceLocator static calls with ms3_validation_service
DI resolution via protected getValidationService() helpers in Customer,
CustomerProfileController and OrderFieldManager. Add parity unit tests
for the digits_between rule.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file 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] Заменить abandoned rakit/validation

1 participant