package com.lesingle.creation.common.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 限流注解
 * <p>
 * 基于 Redis 滑动窗口实现限流
 *
 * @author lesingle
 * @since 1.0.0
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {

    /**
     * 限流 Key
     * 支持 SpEL 表达式，如 "#username"
     */
    String key() default "";

    /**
     * 限流时间窗口（秒）
     * 默认 60 秒
     */
    int time() default 60;

    /**
     * 时间窗口内最大请求数
     * 默认 100 次
     */
    int count() default 100;

    /**
     * 提示信息
     */
    String message() default "请求过于频繁，请稍后再试";

}
