flamingo.me/flamingo-commerce/v3@v3.11.0/payment/application/payment_service.go (about) 1 package application 2 3 import ( 4 "errors" 5 6 "flamingo.me/flamingo-commerce/v3/cart/domain/cart" 7 "flamingo.me/flamingo-commerce/v3/payment/interfaces" 8 ) 9 10 type ( 11 // PaymentService defines the payment service 12 PaymentService struct { 13 webCartPaymentGateways map[string]interfaces.WebCartPaymentGateway 14 } 15 ) 16 17 // Inject dependencies 18 func (ps *PaymentService) Inject( 19 webCartPaymentGatewayProvider interfaces.WebCartPaymentGatewayProvider, 20 ) { 21 ps.webCartPaymentGateways = webCartPaymentGatewayProvider() 22 } 23 24 // PaymentGateway tries to get the supplied payment gateway by code from the registered payment gateways 25 func (ps *PaymentService) PaymentGateway(paymentGatewayCode string) (interfaces.WebCartPaymentGateway, error) { 26 gateway, ok := ps.webCartPaymentGateways[paymentGatewayCode] 27 if !ok { 28 return nil, errors.New("Payment gateway " + paymentGatewayCode + " not found") 29 } 30 31 return gateway, nil 32 } 33 34 // AvailablePaymentGateways returns the list of registered WebCartPaymentGateway 35 func (ps *PaymentService) AvailablePaymentGateways() map[string]interfaces.WebCartPaymentGateway { 36 return ps.webCartPaymentGateways 37 } 38 39 // PaymentGatewayByCart tries to get the payment gateway from the supllied cart 40 func (ps *PaymentService) PaymentGatewayByCart(cart cart.Cart) (interfaces.WebCartPaymentGateway, error) { 41 if cart.PaymentSelection == nil { 42 return nil, errors.New("PaymentSelection not set") 43 } 44 45 return ps.PaymentGateway(cart.PaymentSelection.Gateway()) 46 }