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 }