2023-11-08 21:53:07 +08:00

37 lines
918 B
Go

package rateLimit
import (
"errors"
"sun-panel/global"
)
const (
ERROR_RATE_EXCEED_MINUTE = "minute exceed" // 分钟速率超出限制
ERROR_RATE_EXCEED_HOUR = "minute hour" // 小时速率超出限制
)
// 获取用户套餐的速率 此处正常根据用户套餐设定获取-暂时写死
func GetUserPackageRate(userId uint) (minuteRate, hourRate int) {
return 10, 200
}
func CheckRateLimit(userId uint) error {
minuteRate, hourRate := GetUserPackageRate(userId)
if minuteRate != 0 && minuteRate <= global.RateLimit.MinuteGet(userId) {
return errors.New(ERROR_RATE_EXCEED_MINUTE)
}
if hourRate != 0 && hourRate <= global.RateLimit.HourGet(userId) {
return errors.New(ERROR_RATE_EXCEED_HOUR)
}
return nil
}
// 速率+1次 同时增加小时和分钟的次数
func AddOnceRate(userId uint) error {
global.RateLimit.MinuteAddOnce(userId)
global.RateLimit.HourAddOnce(userId)
return nil
}