package cn.sikey.hmd.enums;

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

/**
 * @Author: nelson
 * @Date: 2025/5/19
 * @Description: 限流
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimit {
    /**
     * 限流key，支持SpEL表达式
     * 示例："#userId" 或 "'test_api_'+#ip"
     */
    String key() default "";

    // 每3秒允许的请求数
    int limit() default 1;

    // 时间窗口设为3秒
    int expire() default 5;

    LimitType type() default LimitType.USER;

    enum LimitType {
        GLOBAL,  // 全局限流
        USER,    // 按用户隔离
        IP       // 按IP隔离
    }
}


