package checkout import ( "fmt" "git.k6n.net/go-cart-actor/pkg/cart" messages "git.k6n.net/go-cart-actor/proto/checkout" ) func asPickupPoint(p *messages.PickupPoint, deliveryId uint32) *PickupPoint { if p == nil { return nil } return &PickupPoint{ Id: p.Id, Name: p.Name, Address: p.Address, City: p.City, Country: p.Country, Zip: p.Zip, } } // HandleSetDelivery mutation // HandleSetDelivery mutation func HandleSetDelivery(g *CheckoutGrain, m *messages.SetDelivery) error { if m == nil { return fmt.Errorf("HandleSetDelivery: nil payload") } if m.Provider == "" { return fmt.Errorf("HandleSetDelivery: missing provider") } // Check if delivery already exists, update or add for _, d := range g.Deliveries { if d.Provider == m.Provider { // Update existing d.Items = m.Items d.PickupPoint = asPickupPoint(m.PickupPoint, d.Id) return nil } } // Add new delivery g.lastDeliveryId++ delivery := &CheckoutDelivery{ Id: g.lastDeliveryId, Provider: m.Provider, Items: m.Items, PickupPoint: asPickupPoint(m.PickupPoint, g.lastDeliveryId), Price: *cart.NewPrice(), // Price might need calculation, but for now zero } g.Deliveries = append(g.Deliveries, delivery) return nil }