BR-001 在庫管理 (Inventory Management)
1. 概要
商品在庫(SKU)の数量を管理し、同時注文時のデータ整合性を保証し、過剰販売(オーバーセル)を防止する。
2. ビジネスルール
2.1 在庫引当 (Inventory Allocation)
- ルール: 「注文作成」時に即座に在庫を減算する。
- 制約: 在庫数は0を下回ってはならない。
- 実装:
- データベース制約(
CHECK (quantity >= 0))を使用して、データベースレベルで非負の値を強制する。
- データベース制約(
2.2 同時実行制御 (Concurrency Control)
- ルール: 同一SKUに対する同時リクエストを、データ破損や更新の消失なしに処理する。
- 実装:
- 楽観的ロック (Optimistic Locking): バージョンカラム(JPAの
@Version)を使用して、競合する変更を検出する。 - 競合が発生した場合(OptimisticLockException)、システムは自動的に再試行するか、商品が利用できなくなったことを示すエラーをユーザーに返す必要がある。
- 楽観的ロック (Optimistic Locking): バージョンカラム(JPAの
2.3 在庫復元(ロールバック) (Inventory Restoration)
- ルール: 注文がキャンセルされた場合、または支払いが失敗した場合、割り当てられた在庫を戻さなければならない。
- 実装:
OrderCancelledまたはPaymentFailedイベントによってトリガーされる。- 特定のSKUの在庫数を加算する。