mirror of
https://github.com/andwati/telecom-platform.git
synced 2026-11-14 16:05:13 +00:00
feat: Refactor Redis rate limiter to use interface for improved testability and remove mock client replacement pattern
- Add RedisClientInterface with Eval/Del/ZCount methods for Redis operation abstraction - Update RedisRateLimiter/NewRedisRateLimiter/NewMultiTierRateLimiter to accept RedisClientInterface instead of concrete redis.Client - Update MockRedisClient.Eval to properly construct call arguments with script and keys - Update MockRedisClient.Del to accept keys as slice instead of variadic parameters
This commit is contained in:
@@ -11,9 +11,16 @@ import (
|
||||
"github.com/go-redis/redis/v8"
|
||||
)
|
||||
|
||||
// RedisClientInterface defines the interface for Redis operations
|
||||
type RedisClientInterface interface {
|
||||
Eval(ctx context.Context, script string, keys []string, args ...interface{}) *redis.Cmd
|
||||
Del(ctx context.Context, keys ...string) *redis.IntCmd
|
||||
ZCount(ctx context.Context, key, min, max string) *redis.IntCmd
|
||||
}
|
||||
|
||||
// RedisRateLimiter implements distributed rate limiting using Redis
|
||||
type RedisRateLimiter struct {
|
||||
client *redis.Client
|
||||
client RedisClientInterface
|
||||
prefix string
|
||||
limit int64
|
||||
window time.Duration
|
||||
@@ -29,7 +36,7 @@ type RateLimitResult struct {
|
||||
}
|
||||
|
||||
// NewRedisRateLimiter creates a new Redis-based rate limiter
|
||||
func NewRedisRateLimiter(client *redis.Client, prefix string, limit int64, window time.Duration) *RedisRateLimiter {
|
||||
func NewRedisRateLimiter(client RedisClientInterface, prefix string, limit int64, window time.Duration) *RedisRateLimiter {
|
||||
return &RedisRateLimiter{
|
||||
client: client,
|
||||
prefix: prefix,
|
||||
@@ -337,7 +344,7 @@ type MultiTierRateLimiter struct {
|
||||
}
|
||||
|
||||
// NewMultiTierRateLimiter creates a multi-tier rate limiter
|
||||
func NewMultiTierRateLimiter(client *redis.Client, tiers map[string]struct {
|
||||
func NewMultiTierRateLimiter(client RedisClientInterface, tiers map[string]struct {
|
||||
Limit int64
|
||||
Window time.Duration
|
||||
Prefix string
|
||||
|
||||
Reference in New Issue
Block a user