try to reserve when entering checkout
Some checks failed
Build and Publish / BuildAndDeployAmd64 (push) Failing after 23s
Build and Publish / BuildAndDeployArm64 (push) Failing after 2m54s

This commit is contained in:
matst80
2025-11-27 13:47:48 +01:00
parent aea168160e
commit fd29300314
4 changed files with 249 additions and 210 deletions

View File

@@ -1,6 +1,7 @@
package cart
import (
"context"
"fmt"
"time"
@@ -30,18 +31,23 @@ import (
// (e.g. reject if PaymentInProgress already true unless reusing
// the same OrderReference).
func InitializeCheckout(g *CartGrain, m *messages.InitializeCheckout) error {
func (c *CartMutationContext) InitializeCheckout(g *CartGrain, m *messages.InitializeCheckout) error {
if m == nil {
return fmt.Errorf("InitializeCheckout: nil payload")
}
if m.OrderId == "" {
return fmt.Errorf("InitializeCheckout: missing orderId")
}
ctx := context.Background()
now := time.Now()
for _, item := range g.Items {
if item.ReservationEndTime != nil {
if now.After(*item.ReservationEndTime) {
return fmt.Errorf("InitializeCheckout: item id %d reservation has expired", item.Id)
endTime, err := c.ReserveItem(ctx, g.Id, item.Sku, item.StoreId, item.Quantity)
if err != nil {
return err
}
item.ReservationEndTime = endTime
}
}
}