flamingo.me/flamingo-commerce/v3@v3.11.0/checkout/interfaces/graphql/resolver.go (about)

     1  package graphql
     2  
     3  import (
     4  	"context"
     5  
     6  	"flamingo.me/flamingo-commerce/v3/cart/domain/decorator"
     7  	graphqlDto "flamingo.me/flamingo-commerce/v3/cart/interfaces/graphql/dto"
     8  	"flamingo.me/flamingo-commerce/v3/checkout/application/placeorder"
     9  	"flamingo.me/flamingo-commerce/v3/checkout/interfaces/graphql/dto"
    10  )
    11  
    12  // CommerceCheckoutQueryResolver resolves graphql checkout queries
    13  type CommerceCheckoutQueryResolver struct {
    14  	placeOrderHandler    *placeorder.Handler
    15  	decoratedCartFactory *decorator.DecoratedCartFactory
    16  	stateMapper          *dto.StateMapper
    17  }
    18  
    19  // Inject dependencies
    20  func (r *CommerceCheckoutQueryResolver) Inject(
    21  	placeOrderHandler *placeorder.Handler,
    22  	decoratedCartFactory *decorator.DecoratedCartFactory,
    23  	stateMapper *dto.StateMapper,
    24  ) {
    25  	r.placeOrderHandler = placeOrderHandler
    26  	r.decoratedCartFactory = decoratedCartFactory
    27  	r.stateMapper = stateMapper
    28  }
    29  
    30  // CommerceCheckoutActivePlaceOrder checks if there is an order in unfinished state
    31  func (r *CommerceCheckoutQueryResolver) CommerceCheckoutActivePlaceOrder(ctx context.Context) (bool, error) {
    32  	return r.placeOrderHandler.HasUnfinishedProcess(ctx)
    33  }
    34  
    35  // CommerceCheckoutCurrentContext returns the last saved context
    36  func (r *CommerceCheckoutQueryResolver) CommerceCheckoutCurrentContext(ctx context.Context) (*dto.PlaceOrderContext, error) {
    37  	pctx, err := r.placeOrderHandler.CurrentContext(ctx)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	dc := graphqlDto.NewDecoratedCart(r.decoratedCartFactory.Create(ctx, pctx.Cart))
    43  
    44  	graphQLState, err := r.stateMapper.Map(*pctx)
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  
    49  	var orderInfos *dto.PlacedOrderInfos
    50  	if pctx.PlaceOrderInfo != nil {
    51  		orderInfos = &dto.PlacedOrderInfos{
    52  			PaymentInfos:        pctx.PlaceOrderInfo.PaymentInfos,
    53  			PlacedOrderInfos:    pctx.PlaceOrderInfo.PlacedOrders,
    54  			Email:               pctx.PlaceOrderInfo.ContactEmail,
    55  			PlacedDecoratedCart: dc,
    56  		}
    57  	}
    58  
    59  	return &dto.PlaceOrderContext{
    60  		Cart:       dc,
    61  		OrderInfos: orderInfos,
    62  		State:      graphQLState,
    63  		UUID:       pctx.UUID,
    64  	}, nil
    65  }