Stripe webhook の信頼性土台(inbox 方式・冪等・取りこぼし突合)を決める
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 30/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- backend-api-design, payments
Línea de trabajo
Comienza leyendo el issue #17 y las decisiones relacionadas sobre el libro mayor de pagos y el procesamiento asíncrono o programado. Define la tabla de inbox, el límite de la transacción, los tipos de eventos suscritos, la política de ordenación y el enfoque de conciliación. Se considera terminado cuando estas decisiones de fiabilidad estén documentadas como requisitos previos de implementación para #17.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
背景
#17 は Stripe webhook(invoice-paid)の実装 issue だが、その土台となる信頼性の設計方針が未確定。Stripe のイベントは仕様上、重複・順序不定・遅延・配信失敗が必ず起きる。
なぜ今決めるか
冪等・取りこぼし耐性を後から付けると、二重計上や記録欠損が既に台帳に生じた後になり、どの入金が欠けたかを判定する根拠が残らない。webhook を入金記録の唯一の入力にすると、配信保証が無いぶん恒久的な穴が生じる。この土台を #17 実装前に決める必要がある。
論点・選択肢
- inbox 方式: 受信イベントを Stripe event id の一意制約付きでまず永続化し、その上で状態更新を同一トランザクション内で行う。処理済みフラグと状態更新を束ねて exactly-once に近づける。
- 順序不定への耐性: イベント種別ではなく対象オブジェクトの現在状態を Stripe で確認して収束させるか、
createdで新旧を判定するか。 - 「入金の真実は webhook イベントであり、同期レスポンスやブラウザのリダイレクト完了ではない」を原則として固定する(会員化・台帳確定の書き込みは webhook のみを起点にする)。
- 取りこぼし対策: 配信は保証されない前提で、Stripe を入金イベントの上流の真実として突合し、欠損を埋める定期リコンサイル/バックフィル経路を土台として設計する(実行基盤は非同期処理基盤の決定に依存)。
受け入れ条件
- イベント受信テーブルの存在・トランザクション境界・購読イベント型・突合方針が決まり、#17 の実装前提として文書化されている。
関連
#17(webhook 実装)の土台(親)。お金の記録アーキテクチャ、非同期・定期処理基盤の決定に依存/接続する。
- Lenguaje dominante
- TypeScript
- Estrellas
- 0
- Forks
- 0
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de traPtitech/Checkin
-
bug documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
traPtitech/Checkin#87 ·
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
traPtitech/Checkin#64 ·
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
traPtitech/Checkin#59 ·
-
documentation enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
traPtitech/Checkin#95 ·
-
bug
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
traPtitech/Checkin#92 ·
Todos los issues de traPtitech/Checkin
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
JuliusBrussee/caveman#1449 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
linagora/twake-calendar-frontend#1924 ·
Los mantenedores suelen responder en 1 día
-
Add: Class TV ModaAbiertocheck:passed streams:add
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
libnativeapi/nativeapi#21 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
GiganticMinecraft/seichi-playguide#183 ·
Los mantenedores suelen responder en 1 día