flamingo.me/flamingo-commerce/v3@v3.11.0/checkout/domain/placeorder/states/validate_cart.go (about) 1 package states 2 3 import ( 4 "context" 5 6 "flamingo.me/flamingo/v3/framework/web" 7 "go.opencensus.io/trace" 8 9 "flamingo.me/flamingo-commerce/v3/cart/application" 10 "flamingo.me/flamingo-commerce/v3/checkout/domain/placeorder/process" 11 ) 12 13 type ( 14 // ValidateCart state 15 ValidateCart struct { 16 cartService *application.CartService 17 } 18 ) 19 20 var _ process.State = ValidateCart{} 21 22 // Inject dependencies 23 func (v *ValidateCart) Inject( 24 cartService *application.CartService, 25 ) *ValidateCart { 26 v.cartService = cartService 27 28 return v 29 } 30 31 // Name get state name 32 func (ValidateCart) Name() string { 33 return "ValidateCart" 34 } 35 36 // Run the state operations 37 func (v ValidateCart) Run(ctx context.Context, p *process.Process) process.RunResult { 38 ctx, span := trace.StartSpan(ctx, "placeorder/state/ValidateCart/Run") 39 defer span.End() 40 41 result, err := v.cartService.ValidateCurrentCart(ctx, web.SessionFromContext(ctx)) 42 if err != nil { 43 return process.RunResult{ 44 Failed: process.ErrorOccurredReason{Error: err.Error()}, 45 } 46 } 47 48 if !result.IsValid() { 49 return process.RunResult{ 50 Failed: process.CartValidationErrorReason{ 51 ValidationResult: result, 52 }, 53 } 54 } 55 56 if p.Context().Cart.GrandTotal.IsZero() { 57 p.UpdateState(CompleteCart{}.Name(), nil) 58 return process.RunResult{} 59 } 60 61 p.UpdateState(ValidatePaymentSelection{}.Name(), nil) 62 return process.RunResult{} 63 } 64 65 // Rollback the state operations 66 func (v ValidateCart) Rollback(context.Context, process.RollbackData) error { 67 return nil 68 } 69 70 // IsFinal if state is a final state 71 func (v ValidateCart) IsFinal() bool { 72 return false 73 }