| @@ -53,6 +53,7 @@ type LimitConfig struct { | |||||
| } | } | ||||
| type LimitConfigVO struct { | type LimitConfigVO struct { | ||||
| Tittle string | |||||
| RefreshRate string | RefreshRate string | ||||
| Scope string | Scope string | ||||
| LimitNum int64 | LimitNum int64 | ||||
| @@ -54,10 +54,10 @@ type TaskConfig struct { | |||||
| } | } | ||||
| type TaskConfigWithLimit struct { | type TaskConfigWithLimit struct { | ||||
| TaskCode string | |||||
| TaskCode string `binding:"Required;MaxSize(256)"` | |||||
| Tittle string | Tittle string | ||||
| AwardType string | AwardType string | ||||
| AwardAmount int64 | |||||
| AwardAmount int64 `binding:"Required;MaxSize(256)"` | |||||
| Creator string | Creator string | ||||
| CreatedUnix timeutil.TimeStamp | CreatedUnix timeutil.TimeStamp | ||||
| Limiters []LimitConfigVO | Limiters []LimitConfigVO | ||||
| @@ -90,3 +90,68 @@ func GetTaskConfigList() ([]*TaskConfig, error) { | |||||
| } | } | ||||
| return r, nil | return r, nil | ||||
| } | } | ||||
| func AddTaskConfig(config TaskConfigWithLimit, doer *User) error { | |||||
| sess := x.NewSession() | |||||
| defer sess.Close() | |||||
| //delete old task config | |||||
| p := &TaskConfig{ | |||||
| TaskCode: config.TaskCode, | |||||
| } | |||||
| _, err := sess.Delete(p) | |||||
| if err != nil { | |||||
| sess.Rollback() | |||||
| return err | |||||
| } | |||||
| //add new config | |||||
| t := &TaskConfig{ | |||||
| TaskCode: config.TaskCode, | |||||
| Tittle: config.Tittle, | |||||
| AwardType: config.AwardType, | |||||
| AwardAmount: config.AwardAmount, | |||||
| CreatorId: doer.ID, | |||||
| CreatorName: doer.Name, | |||||
| } | |||||
| _, err = sess.Insert(t) | |||||
| if err != nil { | |||||
| sess.Rollback() | |||||
| return err | |||||
| } | |||||
| //delete old limiter config | |||||
| lp := &LimitConfig{ | |||||
| LimitType: LimitTypeTask.Name(), | |||||
| LimitCode: config.TaskCode, | |||||
| } | |||||
| _, err = sess.Delete(lp) | |||||
| if err != nil { | |||||
| sess.Rollback() | |||||
| return err | |||||
| } | |||||
| //add new limiter config | |||||
| if config.Limiters != nil && len(config.Limiters) > 0 { | |||||
| for _, v := range config.Limiters { | |||||
| //add new config | |||||
| l := &LimitConfig{ | |||||
| Tittle: v.Tittle, | |||||
| RefreshRate: v.RefreshRate, | |||||
| Scope: v.Scope, | |||||
| LimitNum: v.LimitNum, | |||||
| LimitCode: config.TaskCode, | |||||
| LimitType: LimitTypeTask.Name(), | |||||
| CreatorId: doer.ID, | |||||
| CreatorName: doer.Name, | |||||
| } | |||||
| _, err = sess.Insert(l) | |||||
| if err != nil { | |||||
| sess.Rollback() | |||||
| return err | |||||
| } | |||||
| } | |||||
| } | |||||
| sess.Commit() | |||||
| return nil | |||||
| } | |||||
| @@ -9,6 +9,3 @@ func TaskAccomplishLock(sourceId string, taskType string) string { | |||||
| func TaskConfigList() string { | func TaskConfigList() string { | ||||
| return KeyJoin(TASK_REDIS_PREFIX, "config", "list") | return KeyJoin(TASK_REDIS_PREFIX, "config", "list") | ||||
| } | } | ||||
| func TaskConfigWithLimiterList() string { | |||||
| return KeyJoin(TASK_REDIS_PREFIX, "config", "limiter", "list") | |||||
| } | |||||
| @@ -1322,6 +1322,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Group("/task/config", func() { | m.Group("/task/config", func() { | ||||
| m.Get("/list", task.GetTaskConfigList) | m.Get("/list", task.GetTaskConfigList) | ||||
| m.Post("/add", bindIgnErr(models.TaskConfigWithLimit{}), task.AddTaskConfig) | |||||
| }, reqSignIn) | }, reqSignIn) | ||||
| if setting.API.EnableSwagger { | if setting.API.EnableSwagger { | ||||
| @@ -1,6 +1,7 @@ | |||||
| package task | package task | ||||
| import ( | import ( | ||||
| "code.gitea.io/gitea/models" | |||||
| "code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
| "code.gitea.io/gitea/routers/response" | "code.gitea.io/gitea/routers/response" | ||||
| "code.gitea.io/gitea/services/task" | "code.gitea.io/gitea/services/task" | ||||
| @@ -15,3 +16,12 @@ func GetTaskConfigList(ctx *context.Context) { | |||||
| } | } | ||||
| ctx.JSON(http.StatusOK, response.SuccessWithData(r)) | ctx.JSON(http.StatusOK, response.SuccessWithData(r)) | ||||
| } | } | ||||
| func AddTaskConfig(ctx *context.Context, config models.TaskConfigWithLimit) { | |||||
| err := task.AddTaskConfig(config, ctx.User) | |||||
| if err != nil { | |||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | |||||
| return | |||||
| } | |||||
| ctx.JSON(http.StatusOK, response.Success()) | |||||
| } | |||||
| @@ -2,6 +2,7 @@ package task | |||||
| import ( | import ( | ||||
| "code.gitea.io/gitea/models" | "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_client" | ||||
| "code.gitea.io/gitea/modules/redis/redis_key" | "code.gitea.io/gitea/modules/redis/redis_key" | ||||
| "code.gitea.io/gitea/services/reward/limiter" | "code.gitea.io/gitea/services/reward/limiter" | ||||
| @@ -76,6 +77,7 @@ func GetTaskConfigWithLimitList() ([]*models.TaskConfigWithLimit, error) { | |||||
| lj := l[j] | lj := l[j] | ||||
| if lj.LimitCode == li.TaskCode { | if lj.LimitCode == li.TaskCode { | ||||
| lv = append(lv, models.LimitConfigVO{ | lv = append(lv, models.LimitConfigVO{ | ||||
| Tittle: lj.Tittle, | |||||
| RefreshRate: lj.RefreshRate, | RefreshRate: lj.RefreshRate, | ||||
| Scope: lj.Scope, | Scope: lj.Scope, | ||||
| LimitNum: lj.LimitNum, | LimitNum: lj.LimitNum, | ||||
| @@ -89,3 +91,14 @@ func GetTaskConfigWithLimitList() ([]*models.TaskConfigWithLimit, error) { | |||||
| } | } | ||||
| return r, nil | return r, nil | ||||
| } | } | ||||
| func AddTaskConfig(config models.TaskConfigWithLimit, doer *models.User) error { | |||||
| err := models.AddTaskConfig(config, doer) | |||||
| if err != nil { | |||||
| log.Error("add task config error,config:%v err:%v", config, err) | |||||
| return err | |||||
| } | |||||
| redis_client.Del(redis_key.LimitConfig(models.LimitTypeTask)) | |||||
| redis_client.Del(redis_key.TaskConfigList()) | |||||
| return nil | |||||
| } | |||||