From 7d94d84eb3509dd5f6732527ec2a5e2bd57d5bf4 Mon Sep 17 00:00:00 2001 From: matst80 Date: Mon, 29 Jun 2026 12:34:21 +0200 Subject: [PATCH] refactor --- go.mod | 9 +++++++-- go.sum | 13 +++++++++---- pkg/inventory/adapter.go | 42 ++++++++++++++++++++++++++++++++++++++++ pkg/inventory/types.go | 12 ++++-------- 4 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 pkg/inventory/adapter.go diff --git a/go.mod b/go.mod index 2ad8b74..a276d78 100644 --- a/go.mod +++ b/go.mod @@ -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 ) diff --git a/go.sum b/go.sum index 2dab34f..3073beb 100644 --- a/go.sum +++ b/go.sum @@ -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= diff --git a/pkg/inventory/adapter.go b/pkg/inventory/adapter.go new file mode 100644 index 0000000..086e69e --- /dev/null +++ b/pkg/inventory/adapter.go @@ -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)) +} diff --git a/pkg/inventory/types.go b/pkg/inventory/types.go index d584f67..01bcb27 100644 --- a/pkg/inventory/types.go +++ b/pkg/inventory/types.go @@ -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