請求 v1

examples/invoice/invoice.ja.flow · dandori doc

注文の品を支払期日まで押さえ、支払われたら出荷し、支払われなければ戻す

flow
on 在庫切れtrueon expiredfalseon expired請求 v156 押さえ ← 引き当てる(…)book 在庫.引当.holdstarts在庫切れ → 57 行目; timeout, failure → on failure!57 succeed 結果 = 在庫切れ, 期日 = none58 期限 = 支払条件.支払日(…)dates 支払条件.caltimeout, failure → on failure!59 wait until 期限.at60 入金 = 支払を確かめる(…)GET https://payments.example.com/orders/{注文}/paymentretry 2 times every 10 secondstimeout, failure → on failure!61 match 入金.済み63 押さえ ← 出荷する(…)book 在庫.引当.postsends postexpired → 64 行目; timeout, failure → on failure!64 succeed 結果 = 未払い, 期日 = 期限.day65 succeed 結果 = 出荷済, 期日 = 期限.day67 押さえ ← 戻す(…)book 在庫.引当.voidsends voidexpired → 68 行目; already_posted, timeout, failure → on failure!69 succeed 結果 = 未払い, 期日 = 期限.day
on failure
heldon failurenoneon expiredon already_posted71 on failure72 match 押さえ.state75 押さえ ← 戻す(…)book 在庫.引当.voidsends void78 fail 戻せない"注文のために押さえた品を戻せませんでした"leaving 押さえ同じエラーで失敗する

呼び出し

行呼び出し呼ぶものリトライタイムアウト失敗したとき呼び出しのあとの案件
56押さえ ← 引き当てる(…)book 在庫.引当.hold・starts 在庫.引当——在庫切れ → 57 行目
timeout・failure → on failure
押さえ: held
58期限 = 支払条件.支払日(…)支払条件.cal の日付 支払日1 秒後と 2 秒後の 2 回(failure)—timeout・failure → on failure—
60入金 = 支払を確かめる(…)GET https://payments.example.com/orders/{注文}/payment・idempotent10 秒おきに 2 回(failure・timeout)—timeout・failure → on failure—
63押さえ ← 出荷する(…)book 在庫.引当.post・sends post——expired → 64 行目
timeout・failure → on failure
押さえ: posted
67押さえ ← 戻す(…)book 在庫.引当.void・sends void——expired → 68 行目
already_posted・timeout・failure → on failure
押さえ: voided
75押さえ ← 戻す(…)book 在庫.引当.void・sends void——expired → 76 行目
already_posted → 77 行目
timeout・failure → 78 行目
押さえ: voided

終わり方

行終わり方押さえ
57succeed 結果 = 在庫切れ, 期日 = none始まっていない
64succeed 結果 = 未払い, 期日 = 期限.dayexpired
65succeed 結果 = 出荷済, 期日 = 期限.dayposted
69succeed 結果 = 未払い, 期日 = 期限.dayvoided・expired
78fail 戻せない "注文のために押さえた品を戻せませんでした" leaving 押さえそのまま引き渡す: held・posted・voided・expired
78on failure が最後まで走り、ワークフローは元のエラーで失敗する始まっていないか、posted・voided・expired