Skip to main content

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)、システムは自動的に再試行するか、商品が利用できなくなったことを示すエラーをユーザーに返す必要がある。

2.3 在庫復元(ロールバック) (Inventory Restoration)

  • ルール: 注文がキャンセルされた場合、または支払いが失敗した場合、割り当てられた在庫を戻さなければならない。
  • 実装:
    • OrderCancelled または PaymentFailed イベントによってトリガーされる。
    • 特定のSKUの在庫数を加算する。