outbox for gateways

This commit is contained in:
Stephan D
2026-02-18 01:35:28 +01:00
parent 974caf286c
commit 69531cee73
221 changed files with 12172 additions and 782 deletions

View File

@@ -0,0 +1,11 @@
package model
import moneyv1 "github.com/tech/sendico/pkg/proto/common/money/v1"
// DepositCheckPolicy defines how an external deposit satisfies pre-funding.
type DepositCheckPolicy struct {
WalletRef string
ExpectedAmount *moneyv1.Money
MinConfirmations uint32
TimeoutSeconds int64
}

View File

@@ -0,0 +1,11 @@
package model
// FundingMode defines how payout liquidity must be satisfied for a gateway.
type FundingMode string
const (
FundingModeUnspecified FundingMode = "unspecified"
FundingModeNone FundingMode = "none"
FundingModeBalanceReserve FundingMode = "balance_reserve"
FundingModeDepositObserved FundingMode = "deposit_observed"
)

View File

@@ -252,15 +252,18 @@ type Customer struct {
// PaymentQuoteSnapshot stores the latest quote info.
type PaymentQuoteSnapshot struct {
DebitAmount *paymenttypes.Money `bson:"debitAmount,omitempty" json:"debitAmount,omitempty"`
DebitSettlementAmount *paymenttypes.Money `bson:"debitSettlementAmount,omitempty" json:"debitSettlementAmount,omitempty"`
ExpectedSettlementAmount *paymenttypes.Money `bson:"expectedSettlementAmount,omitempty" json:"expectedSettlementAmount,omitempty"`
ExpectedFeeTotal *paymenttypes.Money `bson:"expectedFeeTotal,omitempty" json:"expectedFeeTotal,omitempty"`
FeeLines []*paymenttypes.FeeLine `bson:"feeLines,omitempty" json:"feeLines,omitempty"`
FeeRules []*paymenttypes.AppliedRule `bson:"feeRules,omitempty" json:"feeRules,omitempty"`
FXQuote *paymenttypes.FXQuote `bson:"fxQuote,omitempty" json:"fxQuote,omitempty"`
NetworkFee *paymenttypes.NetworkFeeEstimate `bson:"networkFee,omitempty" json:"networkFee,omitempty"`
QuoteRef string `bson:"quoteRef,omitempty" json:"quoteRef,omitempty"`
DebitAmount *paymenttypes.Money `bson:"debitAmount,omitempty" json:"debitAmount,omitempty"`
DebitSettlementAmount *paymenttypes.Money `bson:"debitSettlementAmount,omitempty" json:"debitSettlementAmount,omitempty"`
ExpectedSettlementAmount *paymenttypes.Money `bson:"expectedSettlementAmount,omitempty" json:"expectedSettlementAmount,omitempty"`
ExpectedFeeTotal *paymenttypes.Money `bson:"expectedFeeTotal,omitempty" json:"expectedFeeTotal,omitempty"`
TotalCost *paymenttypes.Money `bson:"totalCost,omitempty" json:"totalCost,omitempty"`
FeeLines []*paymenttypes.FeeLine `bson:"feeLines,omitempty" json:"feeLines,omitempty"`
FeeRules []*paymenttypes.AppliedRule `bson:"feeRules,omitempty" json:"feeRules,omitempty"`
Route *paymenttypes.QuoteRouteSpecification `bson:"route,omitempty" json:"route,omitempty"`
ExecutionConditions *paymenttypes.QuoteExecutionConditions `bson:"executionConditions,omitempty" json:"executionConditions,omitempty"`
FXQuote *paymenttypes.FXQuote `bson:"fxQuote,omitempty" json:"fxQuote,omitempty"`
NetworkFee *paymenttypes.NetworkFeeEstimate `bson:"networkFee,omitempty" json:"networkFee,omitempty"`
QuoteRef string `bson:"quoteRef,omitempty" json:"quoteRef,omitempty"`
}
// ExecutionRefs links to downstream systems.

View File

@@ -18,6 +18,8 @@ type PaymentQuoteRecord struct {
Intents []PaymentIntent `bson:"intents,omitempty" json:"intents,omitempty"`
Quote *PaymentQuoteSnapshot `bson:"quote,omitempty" json:"quote,omitempty"`
Quotes []*PaymentQuoteSnapshot `bson:"quotes,omitempty" json:"quotes,omitempty"`
StatusV2 *QuoteStatusV2 `bson:"statusV2,omitempty" json:"statusV2,omitempty"`
StatusesV2 []*QuoteStatusV2 `bson:"statusesV2,omitempty" json:"statusesV2,omitempty"`
Plan *PaymentPlan `bson:"plan,omitempty" json:"plan,omitempty"`
Plans []*PaymentPlan `bson:"plans,omitempty" json:"plans,omitempty"`
ExecutionNote string `bson:"executionNote,omitempty" json:"executionNote,omitempty"`

View File

@@ -0,0 +1,41 @@
package model
// QuoteKind captures v2 quote kind metadata for persistence.
type QuoteKind string
const (
QuoteKindUnspecified QuoteKind = "unspecified"
QuoteKindExecutable QuoteKind = "executable"
QuoteKindIndicative QuoteKind = "indicative"
)
// QuoteLifecycle captures v2 quote lifecycle metadata for persistence.
type QuoteLifecycle string
const (
QuoteLifecycleUnspecified QuoteLifecycle = "unspecified"
QuoteLifecycleActive QuoteLifecycle = "active"
QuoteLifecycleExpired QuoteLifecycle = "expired"
)
// QuoteBlockReason captures v2 non-executability reason for persistence.
type QuoteBlockReason string
const (
QuoteBlockReasonUnspecified QuoteBlockReason = "unspecified"
QuoteBlockReasonRouteUnavailable QuoteBlockReason = "route_unavailable"
QuoteBlockReasonLimitBlocked QuoteBlockReason = "limit_blocked"
QuoteBlockReasonRiskBlocked QuoteBlockReason = "risk_blocked"
QuoteBlockReasonInsufficientLiquidity QuoteBlockReason = "insufficient_liquidity"
QuoteBlockReasonPriceStale QuoteBlockReason = "price_stale"
QuoteBlockReasonAmountTooSmall QuoteBlockReason = "amount_too_small"
QuoteBlockReasonAmountTooLarge QuoteBlockReason = "amount_too_large"
)
// QuoteStatusV2 stores execution status metadata from quotation v2.
type QuoteStatusV2 struct {
Kind QuoteKind `bson:"kind,omitempty" json:"kind,omitempty"`
Lifecycle QuoteLifecycle `bson:"lifecycle,omitempty" json:"lifecycle,omitempty"`
Executable *bool `bson:"executable,omitempty" json:"executable,omitempty"`
BlockReason QuoteBlockReason `bson:"blockReason,omitempty" json:"blockReason,omitempty"`
}