Обернуть покупку в транзакцию (race condition) #75

Open
opened 2026-06-17 19:41:27 +00:00 by NW · 0 comments
Owner

Проблема

purchaseService.js:45-108 — баланс проверяется и списывается без BEGIN TRANSACTION. При параллельных покупках возможен double-spend.

Решение

  • Обернуть createPurchase в BEGIN IMMEDIATE TRANSACTION / COMMIT / ROLLBACK
  • Проверка остатка на складе в той же транзакции
  • Использовать UPDATE ... WHERE quantity_in_stock >= ? для атомарного списания
  • Добавить тест на параллельные покупки

Приоритет: КРИТИЧЕСКИЙ

## Проблема `purchaseService.js:45-108` — баланс проверяется и списывается без `BEGIN TRANSACTION`. При параллельных покупках возможен double-spend. ## Решение - [ ] Обернуть createPurchase в `BEGIN IMMEDIATE TRANSACTION` / `COMMIT` / `ROLLBACK` - [ ] Проверка остатка на складе в той же транзакции - [ ] Использовать `UPDATE ... WHERE quantity_in_stock >= ?` для атомарного списания - [ ] Добавить тест на параллельные покупки ## Приоритет: КРИТИЧЕСКИЙ
NW added this to the Phase 1: Security & Secrets Management milestone 2026-06-17 19:41:27 +00:00
NW added the priority::criticaltype::bugphase::1 labels 2026-06-17 19:41:27 +00:00
Sign in to join this conversation.