flamingo.me/flamingo-commerce/v3@v3.11.0/cart/infrastructure/defaultCustomerCartserviceAdapter.go (about)

     1  package infrastructure
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  
     7  	"go.opencensus.io/trace"
     8  
     9  	"flamingo.me/flamingo/v3/core/auth"
    10  	"flamingo.me/flamingo/v3/framework/flamingo"
    11  
    12  	"flamingo.me/flamingo-commerce/v3/cart/domain/cart"
    13  )
    14  
    15  type (
    16  	//DefaultCustomerCartService defines the in memory customer cart service
    17  	DefaultCustomerCartService struct {
    18  		defaultBehaviour *DefaultCartBehaviour
    19  		logger           flamingo.Logger
    20  	}
    21  )
    22  
    23  var (
    24  	_ cart.CustomerCartService = (*DefaultCustomerCartService)(nil)
    25  )
    26  
    27  // Inject dependencies
    28  func (cs *DefaultCustomerCartService) Inject(
    29  	behaviour *DefaultCartBehaviour,
    30  	logger flamingo.Logger,
    31  ) {
    32  	cs.defaultBehaviour = behaviour
    33  	cs.logger = logger
    34  }
    35  
    36  // GetCart gets a customer cart from the in memory customer cart service
    37  func (cs *DefaultCustomerCartService) GetCart(ctx context.Context, identity auth.Identity, _ string) (*cart.Cart, error) {
    38  	ctx, span := trace.StartSpan(ctx, "cart/DefaultCustomerCartService/GetCart")
    39  	defer span.End()
    40  
    41  	id := identity.Subject()
    42  
    43  	foundCart, err := cs.defaultBehaviour.GetCart(ctx, id)
    44  	if err == nil {
    45  		return foundCart, nil
    46  	}
    47  
    48  	if errors.Is(err, cart.ErrCartNotFound) {
    49  		cart := &cart.Cart{ID: id}
    50  		cart.BelongsToAuthenticatedUser = true
    51  		cart.AuthenticatedUserID = id
    52  
    53  		return cs.defaultBehaviour.StoreNewCart(ctx, cart)
    54  	}
    55  
    56  	return nil, err
    57  }
    58  
    59  // GetModifyBehaviour gets the cart order behaviour of the service
    60  func (cs *DefaultCustomerCartService) GetModifyBehaviour(ctx context.Context, _ auth.Identity) (cart.ModifyBehaviour, error) {
    61  	_, span := trace.StartSpan(ctx, "cart/DefaultCustomerCartService/GetModifyBehaviour")
    62  	defer span.End()
    63  
    64  	return cs.defaultBehaviour, nil
    65  }
    66  
    67  // RestoreCart restores a previously used cart
    68  // Deprecated: (deprecated in the interface)
    69  func (cs *DefaultCustomerCartService) RestoreCart(ctx context.Context, _ auth.Identity, cart cart.Cart) (*cart.Cart, error) {
    70  	_, span := trace.StartSpan(ctx, "cart/DefaultCustomerCartService/RestoreCart")
    71  	defer span.End()
    72  
    73  	cs.logger.Warn("RestoreCart depricated")
    74  	return &cart, nil
    75  }