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  }