Stripe webhook の信頼性土台(inbox 方式・冪等・取りこぼし突合)を決める
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 30/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- typescript
調査の方向性
まず issue #17 と、支払い台帳および非同期またはスケジュール実行の処理に関する関連する決定事項を読みます。inbox テーブル、トランザクション境界、購読するイベント種別、順序付けポリシー、照合方法を定義します。#17 の実装前提として、これらの信頼性に関する決定事項が文書化されていれば完了です。
索引モデルが issue の本文から書いたものです。
説明
背景
#17 は Stripe webhook(invoice-paid)の実装 issue だが、その土台となる信頼性の設計方針が未確定。Stripe のイベントは仕様上、重複・順序不定・遅延・配信失敗が必ず起きる。
なぜ今決めるか
冪等・取りこぼし耐性を後から付けると、二重計上や記録欠損が既に台帳に生じた後になり、どの入金が欠けたかを判定する根拠が残らない。webhook を入金記録の唯一の入力にすると、配信保証が無いぶん恒久的な穴が生じる。この土台を #17 実装前に決める必要がある。
論点・選択肢
- inbox 方式: 受信イベントを Stripe event id の一意制約付きでまず永続化し、その上で状態更新を同一トランザクション内で行う。処理済みフラグと状態更新を束ねて exactly-once に近づける。
- 順序不定への耐性: イベント種別ではなく対象オブジェクトの現在状態を Stripe で確認して収束させるか、
createdで新旧を判定するか。 - 「入金の真実は webhook イベントであり、同期レスポンスやブラウザのリダイレクト完了ではない」を原則として固定する(会員化・台帳確定の書き込みは webhook のみを起点にする)。
- 取りこぼし対策: 配信は保証されない前提で、Stripe を入金イベントの上流の真実として突合し、欠損を埋める定期リコンサイル/バックフィル経路を土台として設計する(実行基盤は非同期処理基盤の決定に依存)。
受け入れ条件
- イベント受信テーブルの存在・トランザクション境界・購読イベント型・突合方針が決まり、#17 の実装前提として文書化されている。
関連
#17(webhook 実装)の土台(親)。お金の記録アーキテクチャ、非同期・定期処理基盤の決定に依存/接続する。
- 主要言語
- TypeScript
- スター
- 0
- フォーク
- 0
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
traPtitech/Checkin のほかの issue
-
bug documentation
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
traPtitech/Checkin#87 ·
-
documentation
難易度 1/5 1時間未満 初心者へのやさしさ 95/100
traPtitech/Checkin#64 ·
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
traPtitech/Checkin#59 ·
-
documentation enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
traPtitech/Checkin#95 ·
-
bug
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
traPtitech/Checkin#92 ·
traPtitech/Checkin の issue をすべて見る
似ている issue
-
Remove unused dependencies対応中かも @alastair-smith が今日担当しました。 オープンchore other
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
alastair-smith/card-games#384 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
code-yeongyu/senpi#5571 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
nexu-io/open-design#9262 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
friction
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
kentcdodds/kody#4753 ·
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
難易度 1/5 1時間未満 初心者へのやさしさ 62/100
lingdojo/kana-dojo#33508 · コメント 1 件 · リアクション 5 件 ·
メンテナーはふだん 1 日以内に返信