feat(order): lifecycle gate with ports, idempotency, and rollback - #596
Ibochkarev wants to merge 1 commit into
Conversation
7292c16 to
596abac
Compare
|
Этот PR включён в тестовую интеграционную сборку всех открытых PR MiniShop3: AgelxNash/MiniShop3, ветка Сборка нужна, чтобы проверить совместимость взаимозависимых серий PR до их мержа — при последовательном слиянии они конфликтуют друг с другом. Это не ревью и не конкурирующий PR: авторство сохранено (1 PR = 1 коммит с исходным автором), ветка пересобирается по мере обновления PR. Как вошёл в сборку: Слился чисто. |
|
Привет! Просто пожелание: удачи с этим PR 🚀 Работа нужная — пусть рассмотрят и смержат как можно скорее. Успехов! |
596abac to
56d165d
Compare
|
Проверил. Сам по себе PR корректен: с текущей Порты не подходят тем, для кого сделаныДокблок
Два разных отката#596 при ошибке порта или Если объединить как есть: остаток зафиксирован или освобождён и закоммичен, затем плагин в Что предлагаюСвести #596 и #603 к одной модели смены статуса в
Порты тогда либо убрать, либо превратить в шаг из п. 1, через который работает склад из #603. После вливания любого PR линии остальные три конфликтуют, так что вливать придётся по одному с ребейзом. Предлагаю порядок #605 → #604 → #596 → #603: у #604 и #605 зависимость от Мелочи
|
|
Rebased onto current |
56d165d to
9adf16e
Compare
9adf16e to
f4c3555
Compare
Описание
OrderStatusServiceстановится единым gate для non-draft смены статуса: опциональный allow-list переходов, DI-порты lifecycle под #589–#591 (пока no-op), режимidempotentдля интеграций, rollbackstatus_idесли порт илиmsOnChangeOrderStatusвернули ошибку. Manager update больше не пишетstatus_idв общийsave()до вызова сервиса. Пример вPaymentdocblock ведёт через gate.Тип изменений
Связанные Issues
Closes #592
Как это было протестировано?
Gate E (локально):
composer test/ phpunit Unit + smoke scripts)Конфигурация тестирования:
feat/issue-592-order-lifecycleЧеклист
Дополнительные заметки
Gate A (AC)
ms3_order_lifecycle_ports)options['idempotent']ms3_order_status_transitionsmsOrderStatusadmin modelDeferred (не blockers этого PR)
orderLog->add()fail → strict rollback