This commit is contained in:
2026-06-29 12:34:21 +02:00
parent 7b25571a23
commit 7d94d84eb3
4 changed files with 62 additions and 14 deletions
+42
View File
@@ -0,0 +1,42 @@
package inventory
import (
"context"
platforminv "git.k6n.net/mats/platform/inventory"
)
// ReservationPolicyAdapter wraps a RedisCartReservationService to satisfy the
// platform/inventory.ReservationPolicy interface. It translates between the
// platform's value types (SKU, LocationID, CartID) and the Redis-level types
// used internally by go-redis-inventory.
type ReservationPolicyAdapter struct {
inner *RedisCartReservationService
}
// NewReservationPolicyAdapter creates an adapter that satisfies
// platform/inventory.ReservationPolicy by delegating to the Redis-backed
// reservation service.
func NewReservationPolicyAdapter(inner *RedisCartReservationService) *ReservationPolicyAdapter {
return &ReservationPolicyAdapter{inner: inner}
}
func (a *ReservationPolicyAdapter) Reserve(ctx context.Context, req platforminv.CartReserveRequest) error {
return a.inner.ReserveForCart(ctx, CartReserveRequest{
InventoryReference: &InventoryReference{
SKU: SKU(req.SKU),
LocationID: LocationID(req.LocationID),
},
CartID: CartID(req.CartID),
Quantity: req.Quantity,
TTL: req.TTL,
})
}
func (a *ReservationPolicyAdapter) Release(ctx context.Context, sku platforminv.SKU, locationID platforminv.LocationID, cartID platforminv.CartID) error {
return a.inner.ReleaseForCart(ctx, SKU(sku), LocationID(locationID), CartID(cartID))
}
func (a *ReservationPolicyAdapter) Available(ctx context.Context, sku platforminv.SKU, locationID platforminv.LocationID) (int64, error) {
return a.inner.GetAvailableInventory(ctx, SKU(sku), LocationID(locationID))
}
+4 -8
View File
@@ -52,14 +52,10 @@ type CartReserveRequest struct {
TTL time.Duration
}
type CartReservationService interface {
ReserveForCart(ctx context.Context, req CartReserveRequest) error
ReleaseForCart(ctx context.Context, sku SKU, locationID LocationID, cartID CartID) error
GetAvailableInventory(ctx context.Context, sku SKU, locationID LocationID) (int64, error)
GetReservationExpiry(ctx context.Context, sku SKU, locationID LocationID, cartID CartID) (time.Time, error)
GetReservationStatus(ctx context.Context, sku SKU, locationID LocationID, cartID CartID) (*ReservationStatus, error)
GetReservationSummary(ctx context.Context, sku SKU, locationID LocationID) (*ReservationSummary, error)
}
// CartReservationService interface was removed in favor of
// platform/inventory.ReservationPolicy. Consumers should depend on the
// platform seam; the concrete *RedisCartReservationService implements its
// methods directly.
type ReservationStatus struct {
Active bool