refactor
This commit is contained in:
@@ -4,11 +4,16 @@ go 1.26.2
|
||||
|
||||
require (
|
||||
github.com/alicebob/miniredis/v2 v2.35.0
|
||||
github.com/redis/go-redis/v9 v9.16.0
|
||||
github.com/redis/go-redis/v9 v9.20.0
|
||||
)
|
||||
|
||||
require (
|
||||
git.k6n.net/mats/platform v0.0.0
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
github.com/stretchr/testify v1.11.1 // indirect
|
||||
github.com/yuin/gopher-lua v1.1.1 // indirect
|
||||
go.uber.org/atomic v1.11.0 // indirect
|
||||
golang.org/x/sys v0.46.0 // indirect
|
||||
)
|
||||
|
||||
@@ -6,9 +6,14 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
||||
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||
github.com/redis/go-redis/v9 v9.16.0 h1:OotgqgLSRCmzfqChbQyG1PHC3tLNR89DG4jdOERSEP4=
|
||||
github.com/redis/go-redis/v9 v9.16.0/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/redis/go-redis/v9 v9.20.0 h1:WnQYxLkgO2xiXTCJY0ldIiI8dNqCDlQAG+AtaH7a2a0=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M=
|
||||
github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
|
||||
github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs=
|
||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||
golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
|
||||
@@ -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