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 } if p.Address == nil { return &PickupPoint{ Id: p.Id, Name: p.Name, DeliveryId: deliveryId, } } return &PickupPoint{ DeliveryId: deliveryId, Id: p.Id, Name: p.Name, Address: &p.Address.AddressLine1, City: &p.Address.City, Zip: &p.Address.Zip, Country: &p.Address.Country, } } // 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 }