46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
messages "git.tornberg.me/go-cart-actor/pkg/messages"
|
|
)
|
|
|
|
// mutation_remove_item.go
|
|
//
|
|
// Registers the RemoveItem mutation.
|
|
//
|
|
// Behavior:
|
|
// - Removes the cart line whose local cart line Id == payload.Id
|
|
// - If no such line exists returns an error
|
|
// - Recalculates cart totals (WithTotals)
|
|
//
|
|
// Notes:
|
|
// - This removes only the line item; any deliveries referencing the removed
|
|
// item are NOT automatically adjusted (mirrors prior logic). If future
|
|
// semantics require pruning delivery.item_ids you can extend this handler.
|
|
// - If multiple lines somehow shared the same Id (should not happen), only
|
|
// the first match would be removed—data integrity relies on unique line Ids.
|
|
|
|
func RemoveItem(g *CartGrain, m *messages.RemoveItem) error {
|
|
if m == nil {
|
|
return fmt.Errorf("RemoveItem: nil payload")
|
|
}
|
|
targetID := uint32(m.Id)
|
|
|
|
index := -1
|
|
for i, it := range g.Items {
|
|
if it.Id == targetID {
|
|
index = i
|
|
break
|
|
}
|
|
}
|
|
if index == -1 {
|
|
return fmt.Errorf("RemoveItem: item id %d not found", m.Id)
|
|
}
|
|
|
|
g.Items = append(g.Items[:index], g.Items[index+1:]...)
|
|
g.UpdateTotals()
|
|
return nil
|
|
}
|