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)) }