56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
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
|
|
}
|