Skip to content

Commit

Permalink
chore(cart): add error handling to collect totals
Browse files Browse the repository at this point in the history
  • Loading branch information
IvanMaidurov committed Mar 15, 2024
1 parent 1a28182 commit 598b074
Showing 1 changed file with 88 additions and 21 deletions.
109 changes: 88 additions & 21 deletions cart/infrastructure/defaultCartBehaviour.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,10 @@ func (cob *DefaultCartBehaviour) Restore(ctx context.Context, cart *domaincart.C
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error cloning cart: %w", err)
}

cob.collectTotals(cart)
err = cob.collectTotals(cart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand Down Expand Up @@ -167,7 +170,10 @@ func (cob *DefaultCartBehaviour) DeleteItem(ctx context.Context, cart *domaincar
}
}

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand Down Expand Up @@ -206,7 +212,10 @@ func (cob *DefaultCartBehaviour) UpdateItems(ctx context.Context, cart *domainca
}
}

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand Down Expand Up @@ -335,7 +344,10 @@ func (cob *DefaultCartBehaviour) AddToCart(ctx context.Context, cart *domaincart
}
}

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand Down Expand Up @@ -508,7 +520,10 @@ func (cob *DefaultCartBehaviour) CleanCart(ctx context.Context, cart *domaincart
newCart.BillingAddress = nil
newCart.Totalitems = nil

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand Down Expand Up @@ -551,7 +566,10 @@ func (cob *DefaultCartBehaviour) CleanDelivery(ctx context.Context, cart *domain
newCart.Deliveries[newLength] = domaincart.Delivery{}
newCart.Deliveries = newCart.Deliveries[:newLength]

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand Down Expand Up @@ -583,7 +601,10 @@ func (cob *DefaultCartBehaviour) UpdatePurchaser(ctx context.Context, cart *doma
}
}

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand All @@ -605,7 +626,10 @@ func (cob *DefaultCartBehaviour) UpdateBillingAddress(ctx context.Context, cart

newCart.BillingAddress = &billingAddress

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand All @@ -627,7 +651,10 @@ func (cob *DefaultCartBehaviour) UpdateAdditionalData(ctx context.Context, cart

newCart.AdditionalData = *additionalData

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand Down Expand Up @@ -656,7 +683,10 @@ func (cob *DefaultCartBehaviour) UpdatePaymentSelection(ctx context.Context, car

newCart.PaymentSelection = paymentSelection

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand All @@ -683,7 +713,10 @@ func (cob *DefaultCartBehaviour) UpdateDeliveryInfo(ctx context.Context, cart *d
if delivery.DeliveryInfo.Code == deliveryCode {
newCart.Deliveries[key].DeliveryInfo = deliveryInfo

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err := cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand All @@ -696,7 +729,10 @@ func (cob *DefaultCartBehaviour) UpdateDeliveryInfo(ctx context.Context, cart *d

newCart.Deliveries = append(newCart.Deliveries, domaincart.Delivery{DeliveryInfo: deliveryInfo})

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand Down Expand Up @@ -757,7 +793,10 @@ func (cob *DefaultCartBehaviour) StoreNewCart(ctx context.Context, cart *domainc

newCart.DefaultCurrency = cob.defaultCurrency

cob.collectTotals(&newCart)
err = cob.collectTotals(&newCart)
if err != nil {
return nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, &newCart)
if err != nil {
Expand All @@ -782,7 +821,10 @@ func (cob *DefaultCartBehaviour) ApplyVoucher(ctx context.Context, cart *domainc
return nil, nil, err
}

cob.collectTotals(newCartWithVoucher)
err = cob.collectTotals(newCartWithVoucher)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, newCartWithVoucher)
if err != nil {
Expand Down Expand Up @@ -822,7 +864,10 @@ func (cob *DefaultCartBehaviour) RemoveVoucher(ctx context.Context, cart *domain
return nil, nil, err
}

cob.collectTotals(newCartWithoutVoucher)
err = cob.collectTotals(newCartWithoutVoucher)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, newCartWithoutVoucher)
if err != nil {
Expand All @@ -848,7 +893,10 @@ func (cob *DefaultCartBehaviour) ApplyGiftCard(ctx context.Context, cart *domain
return nil, nil, err
}

cob.collectTotals(newCartWithGiftCard)
err = cob.collectTotals(newCartWithGiftCard)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, newCartWithGiftCard)
if err != nil {
Expand All @@ -874,7 +922,10 @@ func (cob *DefaultCartBehaviour) RemoveGiftCard(ctx context.Context, cart *domai
return nil, nil, err
}

cob.collectTotals(newCartWithOutGiftCard)
err = cob.collectTotals(newCartWithOutGiftCard)
if err != nil {
return nil, nil, fmt.Errorf("DefaultCartBehaviour: error collecting totals cart: %w", err)
}

err = cob.cartStorage.StoreCart(ctx, newCartWithOutGiftCard)
if err != nil {
Expand Down Expand Up @@ -922,7 +973,9 @@ func (cob *DefaultCartBehaviour) resetPaymentSelectionIfInvalid(ctx context.Cont
return cart, nil, nil
}

func (cob *DefaultCartBehaviour) collectTotals(cart *domaincart.Cart) {
func (cob *DefaultCartBehaviour) collectTotals(cart *domaincart.Cart) error {

Check failure on line 976 in cart/infrastructure/defaultCartBehaviour.go

View workflow job for this annotation

GitHub Actions / lint

calculated cyclomatic complexity for function collectTotals is 11, max is 10 (cyclop)
var err error

cart.TotalGiftCardAmount = priceDomain.NewZero(cart.DefaultCurrency)
cart.GrandTotalWithGiftCards = priceDomain.NewZero(cart.DefaultCurrency)
cart.GrandTotal = priceDomain.NewZero(cart.DefaultCurrency)
Expand Down Expand Up @@ -954,7 +1007,11 @@ func (cob *DefaultCartBehaviour) collectTotals(cart *domaincart.Cart) {

if !delivery.ShippingItem.PriceGrossWithDiscounts.IsZero() {
delivery.GrandTotal = delivery.GrandTotal.ForceAdd(delivery.ShippingItem.PriceGrossWithDiscounts)
discounts, _ := delivery.ShippingItem.AppliedDiscounts.Sum()
discounts, err := delivery.ShippingItem.AppliedDiscounts.Sum()
if err != nil {

Check failure on line 1011 in cart/infrastructure/defaultCartBehaviour.go

View workflow job for this annotation

GitHub Actions / lint

only one cuddle assignment allowed before if statement (wsl)
return fmt.Errorf("failed to sum discounts: %w", err)
}

delivery.TotalDiscountAmount = delivery.TotalDiscountAmount.ForceAdd(discounts)
}

Expand Down Expand Up @@ -996,15 +1053,25 @@ func (cob *DefaultCartBehaviour) collectTotals(cart *domaincart.Cart) {

cart.TotalGiftCardAmount = sumAppliedGiftCards

cart.GrandTotalWithGiftCards, _ = cart.GrandTotal.Sub(cart.TotalGiftCardAmount)
cart.GrandTotalWithGiftCards, err = cart.GrandTotal.Sub(cart.TotalGiftCardAmount)
if err != nil {
return fmt.Errorf("failed to calculate grand totals with gift carts: %w", err)
}

if cart.GrandTotalWithGiftCards.IsNegative() {
cart.GrandTotalWithGiftCards = priceDomain.NewZero(cart.DefaultCurrency)
}

cart.GrandTotalNetWithGiftCards, _ = cart.GrandTotalNet.Sub(cart.TotalGiftCardAmount)
cart.GrandTotalNetWithGiftCards, err = cart.GrandTotalNet.Sub(cart.TotalGiftCardAmount)
if err != nil {
return fmt.Errorf("failed to clculate grand totals net with gift carts: %w", err)
}

if cart.GrandTotalNetWithGiftCards.IsNegative() {
cart.GrandTotalNetWithGiftCards = priceDomain.NewZero(cart.DefaultCurrency)
}

return nil
}

// ApplyVoucher is called when applying a voucher
Expand Down

0 comments on commit 598b074

Please sign in to comment.