flamingo.me/flamingo-commerce/v3@v3.11.0/cart/interfaces/graphql/dto/decoratedCart.go (about)

     1  package dto
     2  
     3  import (
     4  	"flamingo.me/flamingo-commerce/v3/cart/domain/cart"
     5  	"flamingo.me/flamingo-commerce/v3/cart/domain/decorator"
     6  	graphqlProductDto "flamingo.me/flamingo-commerce/v3/product/interfaces/graphql/product/dto"
     7  )
     8  
     9  type (
    10  	// DecoratedCart – provides custom graphql interface methods
    11  	DecoratedCart struct {
    12  		decoratedCart *decorator.DecoratedCart
    13  	}
    14  
    15  	// DecoratedDelivery Decorates a CartItem with its Product
    16  	DecoratedDelivery struct {
    17  		Delivery       cart.Delivery
    18  		DecoratedItems []DecoratedCartItem
    19  	}
    20  
    21  	// DecoratedCartItem Decorates a CartItem with its Product
    22  	DecoratedCartItem struct {
    23  		Item    cart.Item
    24  		Product graphqlProductDto.Product
    25  	}
    26  )
    27  
    28  // Cart – provides the cart
    29  func (dc DecoratedCart) Cart() cart.Cart {
    30  	return dc.decoratedCart.Cart
    31  }
    32  
    33  // DecoratedCart – provides the cart
    34  func (dc DecoratedCart) DecoratedCart() *decorator.DecoratedCart {
    35  	return dc.decoratedCart
    36  }
    37  
    38  // DecoratedDeliveries – returns decorated deliveries
    39  func (dc DecoratedCart) DecoratedDeliveries() []DecoratedDelivery {
    40  	return mapDecoratedDeliveries(dc.decoratedCart.DecoratedDeliveries)
    41  }
    42  
    43  // GetDecoratedDeliveryByCode – returns decorated delivery filtered by code
    44  func (dc *DecoratedCart) GetDecoratedDeliveryByCode(deliveryCode string) *DecoratedDelivery {
    45  	decoratedDelivery, _ := dc.decoratedCart.GetDecoratedDeliveryByCode(deliveryCode)
    46  	return &DecoratedDelivery{
    47  		Delivery:       decoratedDelivery.Delivery,
    48  		DecoratedItems: mapDecoratedItems(decoratedDelivery.DecoratedItems),
    49  	}
    50  }
    51  
    52  // GetAllPaymentRequiredItems – returns all payment required items
    53  func (dc *DecoratedCart) GetAllPaymentRequiredItems() PricedItems {
    54  	dcCart := dc.Cart()
    55  	return PricedItems{items: dcCart.GetAllPaymentRequiredItems()}
    56  }
    57  
    58  // CartSummary – returns cart summary
    59  func (dc *DecoratedCart) CartSummary() CartSummary {
    60  	dcCart := dc.Cart()
    61  	return CartSummary{cart: &dcCart}
    62  }
    63  
    64  // NewDecoratedCart – factory method
    65  func NewDecoratedCart(dc *decorator.DecoratedCart) *DecoratedCart {
    66  	return &DecoratedCart{decoratedCart: dc}
    67  }
    68  
    69  // mapDecoratedDeliveries
    70  func mapDecoratedDeliveries(decoratedDeliveries []decorator.DecoratedDelivery) []DecoratedDelivery {
    71  	if len(decoratedDeliveries) == 0 {
    72  		return nil
    73  	}
    74  
    75  	deliveries := make([]DecoratedDelivery, 0, len(decoratedDeliveries))
    76  
    77  	for _, dd := range decoratedDeliveries {
    78  		deliveries = append(deliveries, DecoratedDelivery{
    79  			Delivery:       dd.Delivery,
    80  			DecoratedItems: mapDecoratedItems(dd.DecoratedItems),
    81  		})
    82  	}
    83  
    84  	return deliveries
    85  }
    86  
    87  func mapDecoratedItems(decoratedItems []decorator.DecoratedCartItem) []DecoratedCartItem {
    88  	items := make([]DecoratedCartItem, 0, len(decoratedItems))
    89  
    90  	for _, di := range decoratedItems {
    91  		items = append(items, DecoratedCartItem{
    92  			Item:    di.Item,
    93  			Product: graphqlProductDto.NewGraphqlProductDto(di.Product, &di.Item.VariantMarketPlaceCode, nil),
    94  		})
    95  	}
    96  
    97  	return items
    98  }