feat(order): lifecycle gate with in-TX ports and idempotency - #596
Ibochkarev wants to merge 3 commits 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
|
@Ibochkarev после ревью 14.09 ветки #596 и #603 только перебазированы на Открытыми остаются: Модель смены статуса (#596 и #603 вместе) — #596 (comment). В #596 по-прежнему порты после #603, гонка внутри одного заказа. #603, незаполненный остаток. Прежде чем смотреть дальше, нужен ответ по модели смены статуса. |
|
@biz87 Спасибо. По модели Контракт
|
|
@biz87 Переписал #596 под зафиксированный контракт:
Ветка смержена с актуальной Дальше по плану: #603 садится на in-TX hooks + conditional journal / lexicon. |
Описание
OrderStatusService— единый gate для non-draft смены статуса: опциональный allow-list переходов, DI-порты lifecycle (пока no-op, точка входа для #603), режимidempotent/ensure()для интеграций.Контракт
change()(согласован с #603)msOnBeforeChangeOrderStatus(может отменить до любых записей).status_id→ commit. Откат только rollback транзакции. КомпенсирующегоrollbackStatus()нет.msOnChangeOrderStatus→ журнал → уведомления. Ошибка плагина возвращается наружу, статус не откатывается (согласованность со складом).save()side-effects.Manager update не пишет
status_idв общийsave()до вызова сервиса.Тип изменений
msOnChangeOrderStatus: статус остаётся (как смысл beta), без compensating save из ранней редакции feat(order): lifecycle gate with in-TX ports and idempotency #596Связанные Issues
Closes #592
Refs #603 (склад сядет на in-TX ports), #604 / #605
Как это было протестировано?
Конфигурация: ветка
feat/issue-592-order-lifecycle(rebase/mergebeta+ контракт PR comment)Чеклист
ms3_err_status_rollback)Дополнительные заметки
Порядок вливания линии: #605 → #604 → #596 → #603.
См. #596 (comment)