47 lines
1.7 KiB
Go
47 lines
1.7 KiB
Go
package main
|
|
|
|
// mutation_set_cart_items.go
|
|
//
|
|
// Registers the SetCartRequest mutation. This mutation replaces the entire list
|
|
// of cart items with the provided list (each entry is an AddRequest).
|
|
//
|
|
// Behavior:
|
|
// - Clears existing items (but leaves deliveries intact).
|
|
// - Iterates over each AddRequest and delegates to CartGrain.AddItem
|
|
// (which performs product lookup, creates AddItem mutation).
|
|
// - If any single addition fails, the mutation aborts with an error;
|
|
// items added prior to the failure remain (consistent with previous behavior).
|
|
// - Totals recalculated after completion via WithTotals().
|
|
//
|
|
// Notes:
|
|
// - Potential optimization: batch product lookups; currently sequential.
|
|
// - Consider adding rollback semantics if atomic replacement is desired.
|
|
// - Deliveries might reference item IDs that are now invalid—original logic
|
|
// also left deliveries untouched. If that becomes an issue, add a cleanup
|
|
// pass to remove deliveries whose item IDs no longer exist.
|
|
|
|
// func HandleSetCartRequest(g *CartGrain, m *messages.SetCartRequest) error {
|
|
// if m == nil {
|
|
// return fmt.Errorf("SetCartRequest: nil payload")
|
|
// }
|
|
|
|
// // Clear current items (keep deliveries)
|
|
// g.mu.Lock()
|
|
// g.Items = make([]*CartItem, 0, len(m.Items))
|
|
// g.mu.Unlock()
|
|
|
|
// for _, it := range m.Items {
|
|
// if it == nil {
|
|
// continue
|
|
// }
|
|
// if it.Sku == "" || it.Quantity < 1 {
|
|
// return fmt.Errorf("SetCartRequest: invalid item (sku='%s' qty=%d)", it.Sku, it.Quantity)
|
|
// }
|
|
// _, err := g.AddItem(it.Sku, int(it.Quantity), it.Country, it.StoreId)
|
|
// if err != nil {
|
|
// return fmt.Errorf("SetCartRequest: add sku '%s' failed: %w", it.Sku, err)
|
|
// }
|
|
// }
|
|
// return nil
|
|
// }
|