better handling of payment in progress
This commit is contained in:
@@ -243,19 +243,21 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("expected SetCartItems")
|
err = fmt.Errorf("expected SetCartItems")
|
||||||
} else {
|
} else {
|
||||||
|
if !c.PaymentInProgress {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
c.Items = make([]*CartItem, 0, len(msg.Items))
|
c.Items = make([]*CartItem, 0, len(msg.Items))
|
||||||
c.mu.Unlock()
|
c.mu.Unlock()
|
||||||
for _, item := range msg.Items {
|
for _, item := range msg.Items {
|
||||||
c.AddItem(item.Sku, int(item.Quantity))
|
c.AddItem(item.Sku, int(item.Quantity))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case AddRequestType:
|
case AddRequestType:
|
||||||
msg, ok := message.Content.(*messages.AddRequest)
|
msg, ok := message.Content.(*messages.AddRequest)
|
||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("expected AddRequest")
|
err = fmt.Errorf("expected AddRequest")
|
||||||
} else {
|
} else {
|
||||||
|
if !c.PaymentInProgress {
|
||||||
existingItem, found := c.FindItemWithSku(msg.Sku)
|
existingItem, found := c.FindItemWithSku(msg.Sku)
|
||||||
if found {
|
if found {
|
||||||
existingItem.Quantity += int(msg.Quantity)
|
existingItem.Quantity += int(msg.Quantity)
|
||||||
@@ -264,12 +266,13 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
return c.AddItem(msg.Sku, int(msg.Quantity)) // extent AddRequest to include quantity
|
return c.AddItem(msg.Sku, int(msg.Quantity)) // extent AddRequest to include quantity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case AddItemType:
|
case AddItemType:
|
||||||
msg, ok := message.Content.(*messages.AddItem)
|
msg, ok := message.Content.(*messages.AddItem)
|
||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("expected AddItem")
|
err = fmt.Errorf("expected AddItem")
|
||||||
} else {
|
} else {
|
||||||
|
if !c.PaymentInProgress {
|
||||||
if msg.Quantity < 1 {
|
if msg.Quantity < 1 {
|
||||||
return nil, fmt.Errorf("invalid quantity")
|
return nil, fmt.Errorf("invalid quantity")
|
||||||
}
|
}
|
||||||
@@ -302,11 +305,13 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
c.mu.Unlock()
|
c.mu.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case ChangeQuantityType:
|
case ChangeQuantityType:
|
||||||
msg, ok := message.Content.(*messages.ChangeQuantity)
|
msg, ok := message.Content.(*messages.ChangeQuantity)
|
||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("expected ChangeQuantity")
|
err = fmt.Errorf("expected ChangeQuantity")
|
||||||
} else {
|
} else {
|
||||||
|
if !c.PaymentInProgress {
|
||||||
for i, item := range c.Items {
|
for i, item := range c.Items {
|
||||||
if item.Id == int(msg.Id) {
|
if item.Id == int(msg.Id) {
|
||||||
if msg.Quantity <= 0 {
|
if msg.Quantity <= 0 {
|
||||||
@@ -322,11 +327,13 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case RemoveItemType:
|
case RemoveItemType:
|
||||||
msg, ok := message.Content.(*messages.RemoveItem)
|
msg, ok := message.Content.(*messages.RemoveItem)
|
||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("expected RemoveItem")
|
err = fmt.Errorf("expected RemoveItem")
|
||||||
} else {
|
} else {
|
||||||
|
if !c.PaymentInProgress {
|
||||||
items := make([]*CartItem, 0, len(c.Items))
|
items := make([]*CartItem, 0, len(c.Items))
|
||||||
for _, item := range c.Items {
|
for _, item := range c.Items {
|
||||||
if item.Id == int(msg.Id) {
|
if item.Id == int(msg.Id) {
|
||||||
@@ -337,11 +344,13 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
}
|
}
|
||||||
c.Items = items
|
c.Items = items
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case SetDeliveryType:
|
case SetDeliveryType:
|
||||||
msg, ok := message.Content.(*messages.SetDelivery)
|
msg, ok := message.Content.(*messages.SetDelivery)
|
||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("expected SetDelivery")
|
err = fmt.Errorf("expected SetDelivery")
|
||||||
} else {
|
} else {
|
||||||
|
if !c.PaymentInProgress {
|
||||||
c.lastDeliveryId++
|
c.lastDeliveryId++
|
||||||
items := make([]int, 0)
|
items := make([]int, 0)
|
||||||
withDelivery := c.ItemsWithDelivery()
|
withDelivery := c.ItemsWithDelivery()
|
||||||
@@ -375,11 +384,13 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case RemoveDeliveryType:
|
case RemoveDeliveryType:
|
||||||
msg, ok := message.Content.(*messages.RemoveDelivery)
|
msg, ok := message.Content.(*messages.RemoveDelivery)
|
||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("expected RemoveDelivery")
|
err = fmt.Errorf("expected RemoveDelivery")
|
||||||
} else {
|
} else {
|
||||||
|
if !c.PaymentInProgress {
|
||||||
deliveries := make([]*CartDelivery, 0, len(c.Deliveries))
|
deliveries := make([]*CartDelivery, 0, len(c.Deliveries))
|
||||||
for _, delivery := range c.Deliveries {
|
for _, delivery := range c.Deliveries {
|
||||||
if delivery.Id == int(msg.Id) {
|
if delivery.Id == int(msg.Id) {
|
||||||
@@ -390,11 +401,13 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
}
|
}
|
||||||
c.Deliveries = deliveries
|
c.Deliveries = deliveries
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case SetPickupPointType:
|
case SetPickupPointType:
|
||||||
msg, ok := message.Content.(*messages.SetPickupPoint)
|
msg, ok := message.Content.(*messages.SetPickupPoint)
|
||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("expected SetPickupPoint")
|
err = fmt.Errorf("expected SetPickupPoint")
|
||||||
} else {
|
} else {
|
||||||
|
if !c.PaymentInProgress {
|
||||||
for _, delivery := range c.Deliveries {
|
for _, delivery := range c.Deliveries {
|
||||||
if delivery.Id == int(msg.DeliveryId) {
|
if delivery.Id == int(msg.DeliveryId) {
|
||||||
delivery.PickupPoint = &messages.PickupPoint{
|
delivery.PickupPoint = &messages.PickupPoint{
|
||||||
@@ -409,6 +422,7 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case CreateCheckoutOrderType:
|
case CreateCheckoutOrderType:
|
||||||
msg, ok := message.Content.(*messages.CreateCheckoutOrder)
|
msg, ok := message.Content.(*messages.CreateCheckoutOrder)
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -457,6 +471,14 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
result := MakeFrameWithPayload(RemoteCreateOrderReply, 200, orderPayload)
|
result := MakeFrameWithPayload(RemoteCreateOrderReply, 200, orderPayload)
|
||||||
return &result, nil
|
return &result, nil
|
||||||
}
|
}
|
||||||
|
case OrderCompletedType:
|
||||||
|
msg, ok := message.Content.(*messages.OrderCreated)
|
||||||
|
if !ok {
|
||||||
|
err = fmt.Errorf("expected OrderCompleted")
|
||||||
|
} else {
|
||||||
|
c.OrderReference = msg.OrderId
|
||||||
|
c.PaymentReference = msg.Status
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("unknown message type %d", message.Type)
|
err = fmt.Errorf("unknown message type %d", message.Type)
|
||||||
}
|
}
|
||||||
|
|||||||
2
main.go
2
main.go
@@ -224,7 +224,7 @@ func main() {
|
|||||||
Status: klarnaOrderResponse.Status},
|
Status: klarnaOrderResponse.Status},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error processing message: %v\n", err)
|
log.Printf("Error processing cart message: %v\n", err)
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
w.Write([]byte(err.Error()))
|
w.Write([]byte(err.Error()))
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user