namespace Application.Abstractions.RateLimit; /// /// Sliding window rate limiter abstraction (구현은 Redis). /// public interface IRateLimiter { Task CheckAsync(string key, int limit, TimeSpan window, CancellationToken ct = default); } public sealed record RateLimitResult(bool Allowed, int Limit, int Remaining, DateTime ResetAt);