Skip to content

fix(order): блокировка Save во время пересчёта стоимости - #461

Open
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-379-order-save-recalc-race
Open

fix(order): блокировка Save во время пересчёта стоимости#461
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-379-order-save-recalc-race

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

При параллельном Save и Recalculate cost PUT с snapshot старых cost/cart_cost/delivery_cost перезаписывал свежий результат пересчёта (lost update). Recalculate уже блокировался при saving, но Save не учитывал recalculatingCost.

Добавлены симметричные in-flight guard'ы в saveOrder / recalculateOrderCost и :disabled на кнопку Save, пока идёт пересчёт.

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

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

Связанные Issues

Closes #379

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

cd core/components/minishop3
php tests/OrderSaveRecalcRaceTest.php   # exit 0
composer ci:php                         # exit 0 (14 smoke tests)

cd ../../vueManager
npx eslint src/components/OrderView.vue \
  src/components/order/OrderFormActionsBar.vue \
  src/components/order/OrderInfoTab.vue \
  src/components/order/OrderAddressTab.vue --max-warnings 0  # exit 0
  • Ручное тестирование (анализ race + UI disabled)
  • Автоматические тесты
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: branch fix/issue-379-order-save-recalc-race
  • MODX: не требовался (UI + source smoke)
  • PHP: 8.2+

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

n/a

Чеклист

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

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

Out of scope: etag/updatedon merge на backend (#379 упоминает как альтернативу). Текущий фикс — UI lock + guard'ы, как в AC issue.

@Ibochkarev
Ibochkarev requested a review from biz87 July 28, 2026 05:23
@Ibochkarev Ibochkarev added bug Something isn't working javascript Pull requests that update javascript code priority: high Важно исправить в ближайшее время labels Jul 28, 2026
@Ibochkarev
Ibochkarev force-pushed the fix/issue-379-order-save-recalc-race branch 2 times, most recently from 086df3c to d80bf0d Compare July 29, 2026 11:32
Prevent lost-update when Save PUT races with recalculate-cost by disabling
the save action in UI and adding symmetric in-flight guards in OrderView.
@Ibochkarev
Ibochkarev force-pushed the fix/issue-379-order-save-recalc-race branch from d80bf0d to 0e267a4 Compare August 2, 2026 02:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working javascript Pull requests that update javascript code priority: high Важно исправить в ближайшее время

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] OrderView: save во время recalculate затирает cost (lost update)

1 participant