|
- package limiter
-
- import (
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/redis/redis_client"
- "code.gitea.io/gitea/modules/redis/redis_key"
- )
-
- func GetSingleDailyPointLimitConfig() (*models.LimitConfigVO, error) {
- r, err := GetLimitConfigList(models.LimitConfigQueryOpts{
- RefreshRate: models.PeriodDaily,
- Scope: models.LimitScopeSingleUser,
- LimitCode: models.SourceTypeAccomplishTask.Name(),
- LimitType: models.LimitTypeRewardPoint,
- })
- if err != nil {
- return nil, err
- }
- if r == nil || len(r) == 0 {
- return nil, nil
- }
- return r[0], nil
- }
-
- func SetSingleDailyPointLimitConfig(limitNum int64, doer *models.User) error {
- l := &models.LimitConfigVO{
- RefreshRate: models.PeriodDaily,
- Scope: models.LimitScopeSingleUser.Name(),
- LimitCode: models.SourceTypeAccomplishTask.Name(),
- LimitType: models.LimitTypeRewardPoint.Name(),
- LimitNum: limitNum,
- }
- return AddLimitConfig(l, doer)
- }
-
- func GetLimitConfigList(opts models.LimitConfigQueryOpts) ([]*models.LimitConfigVO, error) {
- r, err := GetLimitersByLimitType(opts.LimitType)
- if err != nil {
- log.Error("GetLimitConfigList error when getting limiters by limit type.err=%v", err)
- return nil, err
- }
- result := make([]*models.LimitConfigVO, 0)
- for _, v := range r {
- if opts.LimitCode != "" && opts.LimitCode != v.LimitCode {
- continue
- }
- if opts.Scope != "" && opts.Scope.Name() != v.Scope {
- continue
- }
- if opts.RefreshRate != "" && opts.RefreshRate != v.RefreshRate {
- continue
- }
- if opts.LimitType != "" && opts.LimitType.Name() != v.LimitType {
- continue
- }
- result = append(result, v.ToLimitConfigVO())
- }
- return result, nil
- }
- func GetLimitConfigById(id int64) (*models.LimitConfig, error) {
- return models.GetLimitConfigById(id)
- }
-
- func AddLimitConfig(config *models.LimitConfigVO, doer *models.User) error {
- r := &models.LimitConfig{
- Tittle: config.Tittle,
- RefreshRate: config.RefreshRate,
- Scope: config.Scope,
- LimitNum: config.LimitNum,
- LimitCode: config.LimitCode,
- LimitType: config.LimitType,
- CreatorId: doer.ID,
- CreatorName: doer.Name,
- }
- err := models.AddLimitConfig(r)
-
- if err != nil {
- log.Error("add limit config error,config:%v err:%v", config, err)
- return err
- }
- redis_client.Del(redis_key.LimitConfig(config.LimitType))
- return nil
- }
-
- func DeleteLimitConfig(id int64, doer *models.User) error {
- config, err := GetLimitConfigById(id)
- if err != nil {
- log.Error("GetLimitConfigById err,e=%v", err)
- return err
- }
- err = models.DeleteLimitConfig(*config, doer.ID, doer.Name)
-
- if err != nil {
- log.Error("add limit config error,config:%v err:%v", config, err)
- return err
- }
- redis_client.Del(redis_key.LimitConfig(config.LimitType))
- return nil
- }
|