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 // }