diff --git a/pkg/checkout/checkout-grain.go b/pkg/checkout/checkout-grain.go index faeb916..adfe171 100644 --- a/pkg/checkout/checkout-grain.go +++ b/pkg/checkout/checkout-grain.go @@ -87,24 +87,25 @@ type ConfirmationStatus struct { } type CheckoutGrain struct { - mu sync.RWMutex - lastDeliveryId uint32 - lastGiftcardId uint32 - lastAccess time.Time - lastChange time.Time - Version uint32 `json:"version"` - Id CheckoutId `json:"id"` - CartId cart.CartId `json:"cartId"` - CartVersion uint64 `json:"cartVersion"` - CartState *cart.CartGrain `json:"cartState"` // snapshot of items - CartTotalPrice *cart.Price `json:"cartTotalPrice"` - OrderId *string `json:"orderId"` - Deliveries []*CheckoutDelivery `json:"deliveries,omitempty"` - PaymentInProgress uint16 `json:"paymentInProgress"` - InventoryReserved bool `json:"inventoryReserved"` - Confirmation *ConfirmationStatus `json:"confirmationViewed,omitempty"` - Payments []*Payment `json:"payments,omitempty"` - ContactDetails *ContactDetails `json:"contactDetails,omitempty"` + mu sync.RWMutex + lastDeliveryId uint32 + lastGiftcardId uint32 + lastAccess time.Time + lastChange time.Time + Version uint32 `json:"version"` + Id CheckoutId `json:"id"` + CartId cart.CartId `json:"cartId"` + CartVersion uint64 `json:"cartVersion"` + CartState *cart.CartGrain `json:"cartState"` // snapshot of items + CartTotalPrice *cart.Price `json:"cartTotalPrice"` + OrderId *string `json:"orderId"` + Deliveries []*CheckoutDelivery `json:"deliveries,omitempty"` + PaymentInProgress uint16 `json:"paymentInProgress"` + AmountInCentsRemaining int64 `json:"amountRemaining"` + InventoryReserved bool `json:"inventoryReserved"` + Confirmation *ConfirmationStatus `json:"confirmationViewed,omitempty"` + Payments []*Payment `json:"payments,omitempty"` + ContactDetails *ContactDetails `json:"contactDetails,omitempty"` } func NewCheckoutGrain(id uint64, cartId cart.CartId, cartVersion uint64, ts time.Time, cartState *cart.CartGrain) *CheckoutGrain { diff --git a/pkg/checkout/mutation_initialize_checkout.go b/pkg/checkout/mutation_initialize_checkout.go index bfe5c83..4aecc14 100644 --- a/pkg/checkout/mutation_initialize_checkout.go +++ b/pkg/checkout/mutation_initialize_checkout.go @@ -47,6 +47,7 @@ func HandleInitializeCheckout(g *CheckoutGrain, m *messages.InitializeCheckout) } g.CartTotalPrice = g.CartState.TotalPrice + g.AmountInCentsRemaining = g.CartTotalPrice.IncVat return nil } diff --git a/pkg/checkout/mutation_payment_completed.go b/pkg/checkout/mutation_payment_completed.go index 619f5fc..2e01d38 100644 --- a/pkg/checkout/mutation_payment_completed.go +++ b/pkg/checkout/mutation_payment_completed.go @@ -36,6 +36,12 @@ func HandlePaymentCompleted(g *CheckoutGrain, m *messages.PaymentCompleted) erro // Update checkout status g.PaymentInProgress-- + sum := g.CartState.TotalPrice.IncVat + + for _, payment := range g.SettledPayments() { + sum -= payment.Amount + } + g.AmountInCentsRemaining = sum return nil }