multiple quotes payment
This commit is contained in:
@@ -36,6 +36,27 @@ func (r *QuotePayment) Validate() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
type QuotePayments struct {
|
||||
PaymentBase `json:",inline"`
|
||||
Intents []PaymentIntent `json:"intents"`
|
||||
PreviewOnly bool `json:"previewOnly"`
|
||||
}
|
||||
|
||||
func (r *QuotePayments) Validate() error {
|
||||
if err := r.PaymentBase.Validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
if len(r.Intents) == 0 {
|
||||
return merrors.InvalidArgument("intents are required", "intents")
|
||||
}
|
||||
for i := range r.Intents {
|
||||
if err := r.Intents[i].Validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type InitiatePayment struct {
|
||||
PaymentBase `json:",inline"`
|
||||
Intent *PaymentIntent `json:"intent,omitempty"`
|
||||
|
||||
@@ -14,3 +14,19 @@ func toMoney(m *moneyv1.Money) *model.Money {
|
||||
Currency: m.GetCurrency(),
|
||||
}
|
||||
}
|
||||
|
||||
func toMoneyList(list []*moneyv1.Money) []*model.Money {
|
||||
if len(list) == 0 {
|
||||
return nil
|
||||
}
|
||||
result := make([]*model.Money, 0, len(list))
|
||||
for _, item := range list {
|
||||
if m := toMoney(item); m != nil {
|
||||
result = append(result, m)
|
||||
}
|
||||
}
|
||||
if len(result) == 0 {
|
||||
return nil
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -49,6 +49,19 @@ type PaymentQuote struct {
|
||||
FxQuote *FxQuote `json:"fxQuote,omitempty"`
|
||||
}
|
||||
|
||||
type PaymentQuoteAggregate struct {
|
||||
DebitAmounts []*model.Money `json:"debitAmounts,omitempty"`
|
||||
ExpectedSettlementAmounts []*model.Money `json:"expectedSettlementAmounts,omitempty"`
|
||||
ExpectedFeeTotals []*model.Money `json:"expectedFeeTotals,omitempty"`
|
||||
NetworkFeeTotals []*model.Money `json:"networkFeeTotals,omitempty"`
|
||||
}
|
||||
|
||||
type PaymentQuotes struct {
|
||||
QuoteRef string `json:"quoteRef,omitempty"`
|
||||
Aggregate *PaymentQuoteAggregate `json:"aggregate,omitempty"`
|
||||
Quotes []PaymentQuote `json:"quotes,omitempty"`
|
||||
}
|
||||
|
||||
type Payment struct {
|
||||
PaymentRef string `json:"paymentRef,omitempty"`
|
||||
IdempotencyKey string `json:"idempotencyKey,omitempty"`
|
||||
@@ -63,6 +76,11 @@ type paymentQuoteResponse struct {
|
||||
Quote *PaymentQuote `json:"quote"`
|
||||
}
|
||||
|
||||
type paymentQuotesResponse struct {
|
||||
authResponse `json:",inline"`
|
||||
Quote *PaymentQuotes `json:"quote"`
|
||||
}
|
||||
|
||||
type paymentResponse struct {
|
||||
authResponse `json:",inline"`
|
||||
Payment *Payment `json:"payment"`
|
||||
@@ -76,6 +94,14 @@ func PaymentQuoteResponse(logger mlogger.Logger, quote *orchestratorv1.PaymentQu
|
||||
})
|
||||
}
|
||||
|
||||
// PaymentQuotes wraps batch quotes with refreshed access token.
|
||||
func PaymentQuotesResponse(logger mlogger.Logger, resp *orchestratorv1.QuotePaymentsResponse, token *TokenData) http.HandlerFunc {
|
||||
return response.Ok(logger, paymentQuotesResponse{
|
||||
Quote: toPaymentQuotes(resp),
|
||||
authResponse: authResponse{AccessToken: *token},
|
||||
})
|
||||
}
|
||||
|
||||
// Payment wraps a payment with refreshed access token.
|
||||
func PaymentResponse(logger mlogger.Logger, payment *orchestratorv1.Payment, token *TokenData) http.HandlerFunc {
|
||||
return response.Ok(logger, paymentResponse{
|
||||
@@ -158,6 +184,38 @@ func toPaymentQuote(q *orchestratorv1.PaymentQuote) *PaymentQuote {
|
||||
}
|
||||
}
|
||||
|
||||
func toPaymentQuoteAggregate(q *orchestratorv1.PaymentQuoteAggregate) *PaymentQuoteAggregate {
|
||||
if q == nil {
|
||||
return nil
|
||||
}
|
||||
return &PaymentQuoteAggregate{
|
||||
DebitAmounts: toMoneyList(q.GetDebitAmounts()),
|
||||
ExpectedSettlementAmounts: toMoneyList(q.GetExpectedSettlementAmounts()),
|
||||
ExpectedFeeTotals: toMoneyList(q.GetExpectedFeeTotals()),
|
||||
NetworkFeeTotals: toMoneyList(q.GetNetworkFeeTotals()),
|
||||
}
|
||||
}
|
||||
|
||||
func toPaymentQuotes(resp *orchestratorv1.QuotePaymentsResponse) *PaymentQuotes {
|
||||
if resp == nil {
|
||||
return nil
|
||||
}
|
||||
quotes := make([]PaymentQuote, 0, len(resp.GetQuotes()))
|
||||
for _, quote := range resp.GetQuotes() {
|
||||
if dto := toPaymentQuote(quote); dto != nil {
|
||||
quotes = append(quotes, *dto)
|
||||
}
|
||||
}
|
||||
if len(quotes) == 0 {
|
||||
quotes = nil
|
||||
}
|
||||
return &PaymentQuotes{
|
||||
QuoteRef: resp.GetQuoteRef(),
|
||||
Aggregate: toPaymentQuoteAggregate(resp.GetAggregate()),
|
||||
Quotes: quotes,
|
||||
}
|
||||
}
|
||||
|
||||
func toPayment(p *orchestratorv1.Payment) *Payment {
|
||||
if p == nil {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user