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);