package com.reading.platform.common.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 限流注解
 * 用于对特定接口或方法进行限流控制
 * 优先级高于配置文件的限流规则
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimit {

    /**
     * 限流键的前缀
     * 默认使用方法名作为前缀
     */
    String keyPrefix() default "";

    /**
     * 时间窗口大小
     * 默认 60 秒
     */
    long time() default 60;

    /**
     * 时间单位
     * 默认秒
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

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

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

    /**
     * 是否启用限流
     * 默认启用
     */
    boolean enabled() default true;
}
