ci(arch): forbid pkg packages from depending on project core packages

This commit is contained in:
ryan
2026-09-02 22:22:04 +08:00
parent 9632604958
commit 90f3efdd50
19 changed files with 985 additions and 40 deletions
+41
View File
@@ -5,6 +5,7 @@ package cache
import (
"Wavelet/core/contracts"
"Wavelet/pkg/limiter"
"context"
"github.com/go-redis/redis_rate/v10"
@@ -57,3 +58,43 @@ func (r *redisLimiterImpl) AllowN(ctx context.Context, key string, rate contract
func (r *redisLimiterImpl) Reset(ctx context.Context, key string) error {
return r.limiter.Reset(ctx, r.prefixedKey(key))
}
type memoryLimiterFallback struct {
limiter *limiter.MemoryLimiter
}
func newMemoryLimiterFallback() contracts.LimiterService {
return &memoryLimiterFallback{
limiter: limiter.NewMemoryLimiter(),
}
}
func (m *memoryLimiterFallback) Allow(ctx context.Context, key string, rate contracts.Rate) (*contracts.RateLimitResult, error) {
res, err := m.limiter.Allow(ctx, key, limiter.Rate{Limit: rate.Limit, Period: rate.Period})
if err != nil {
return nil, err
}
return &contracts.RateLimitResult{
Allowed: res.Allowed,
Remaining: res.Remaining,
ResetAfter: res.ResetAfter,
RetryAfter: res.RetryAfter,
}, nil
}
func (m *memoryLimiterFallback) AllowN(ctx context.Context, key string, rate contracts.Rate, n int) (*contracts.RateLimitResult, error) {
res, err := m.limiter.AllowN(ctx, key, limiter.Rate{Limit: rate.Limit, Period: rate.Period}, n)
if err != nil {
return nil, err
}
return &contracts.RateLimitResult{
Allowed: res.Allowed,
Remaining: res.Remaining,
ResetAfter: res.ResetAfter,
RetryAfter: res.RetryAfter,
}, nil
}
func (m *memoryLimiterFallback) Reset(ctx context.Context, key string) error {
return m.limiter.Reset(ctx, key)
}
+1 -2
View File
@@ -8,7 +8,6 @@ import (
"Wavelet/core"
"Wavelet/core/contracts"
"Wavelet/pkg/cache/ram"
"Wavelet/pkg/limiter"
"Wavelet/pkg/util"
"context"
"encoding/json"
@@ -145,7 +144,7 @@ func (p *Plugin) Apply(ctx *core.Context) error {
if redisClient != nil {
limiterSvc = newRedisLimiter(redisClient, p.keyPrefix)
} else {
limiterSvc = limiter.NewMemoryLimiter()
limiterSvc = newMemoryLimiterFallback()
}
core.Provide[contracts.LimiterService](ctx, limiterSvc)