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  }