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 }