処理フロー トランザクション開始 productsをSELECTしてstockがあるか確認する ここで商品を確保する(productsの該当レコードのロック)が必要となる ordersにINSERT order_detailsにリクエストの商品配列の件数分INSERT(order_id=ordersと紐付け, product_id=リクエストから) 外部APIに連携して決済する(total_priceを計算して、cardを渡す) 失敗すれば ロールバック 決済が成功すればproductsをUPDATE(stockを減らす) paymentsにINSERT(order_id=ordersと紐付け, amount= total_price, card=リクエストから) コミット 処理全体がトランザクション内で実行されるため外部APIで失敗した場合にロールバックすればなんの問題もないように思われ