refactor
This commit is contained in:
@@ -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))
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user