From 40f7620a3413daa2cb6a030685643078eb71effb Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Thu, 9 Jun 2022 16:58:03 +0800 Subject: [PATCH] #1249 add task config edit api --- models/limit_config.go | 1 + models/task_config.go | 69 ++++++++++++++++++++++- modules/redis/redis_key/task_redis_key.go | 3 - routers/routes/routes.go | 1 + routers/task/config.go | 10 ++++ services/task/task_config.go | 13 +++++ 6 files changed, 92 insertions(+), 5 deletions(-) diff --git a/models/limit_config.go b/models/limit_config.go index 75dccac9a..154c13ed8 100644 --- a/models/limit_config.go +++ b/models/limit_config.go @@ -53,6 +53,7 @@ type LimitConfig struct { } type LimitConfigVO struct { + Tittle string RefreshRate string Scope string LimitNum int64 diff --git a/models/task_config.go b/models/task_config.go index eee5caea5..44a3bea32 100644 --- a/models/task_config.go +++ b/models/task_config.go @@ -54,10 +54,10 @@ type TaskConfig struct { } type TaskConfigWithLimit struct { - TaskCode string + TaskCode string `binding:"Required;MaxSize(256)"` Tittle string AwardType string - AwardAmount int64 + AwardAmount int64 `binding:"Required;MaxSize(256)"` Creator string CreatedUnix timeutil.TimeStamp Limiters []LimitConfigVO @@ -90,3 +90,68 @@ func GetTaskConfigList() ([]*TaskConfig, error) { } 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 +} diff --git a/modules/redis/redis_key/task_redis_key.go b/modules/redis/redis_key/task_redis_key.go index 8d6fb3f6e..4e30688e1 100644 --- a/modules/redis/redis_key/task_redis_key.go +++ b/modules/redis/redis_key/task_redis_key.go @@ -9,6 +9,3 @@ func TaskAccomplishLock(sourceId string, taskType string) string { func TaskConfigList() string { return KeyJoin(TASK_REDIS_PREFIX, "config", "list") } -func TaskConfigWithLimiterList() string { - return KeyJoin(TASK_REDIS_PREFIX, "config", "limiter", "list") -} diff --git a/routers/routes/routes.go b/routers/routes/routes.go index b2393246c..135f4d702 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1322,6 +1322,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/task/config", func() { m.Get("/list", task.GetTaskConfigList) + m.Post("/add", bindIgnErr(models.TaskConfigWithLimit{}), task.AddTaskConfig) }, reqSignIn) if setting.API.EnableSwagger { diff --git a/routers/task/config.go b/routers/task/config.go index 95db0b7d8..d92d0fb51 100644 --- a/routers/task/config.go +++ b/routers/task/config.go @@ -1,6 +1,7 @@ package task import ( + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/routers/response" "code.gitea.io/gitea/services/task" @@ -15,3 +16,12 @@ func GetTaskConfigList(ctx *context.Context) { } 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()) +} diff --git a/services/task/task_config.go b/services/task/task_config.go index 3f2225d2c..fe50647e3 100644 --- a/services/task/task_config.go +++ b/services/task/task_config.go @@ -2,6 +2,7 @@ package task 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" "code.gitea.io/gitea/services/reward/limiter" @@ -76,6 +77,7 @@ func GetTaskConfigWithLimitList() ([]*models.TaskConfigWithLimit, error) { lj := l[j] if lj.LimitCode == li.TaskCode { lv = append(lv, models.LimitConfigVO{ + Tittle: lj.Tittle, RefreshRate: lj.RefreshRate, Scope: lj.Scope, LimitNum: lj.LimitNum, @@ -89,3 +91,14 @@ func GetTaskConfigWithLimitList() ([]*models.TaskConfigWithLimit, error) { } 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 +}