| @@ -0,0 +1,103 @@ | |||||
| package models | |||||
| import ( | |||||
| "code.gitea.io/gitea/modules/timeutil" | |||||
| "xorm.io/builder" | |||||
| ) | |||||
| type Medal struct { | |||||
| ID int64 `xorm:"pk autoincr"` | |||||
| Name string | |||||
| LightedIcon string `xorm:"varchar(2048)"` | |||||
| GreyedIcon string `xorm:"varchar(2048)"` | |||||
| Url string `xorm:"varchar(2048)"` | |||||
| CategoryId int64 | |||||
| CreatedUnix timeutil.TimeStamp `xorm:"created"` | |||||
| UpdatedUnix timeutil.TimeStamp `xorm:"updated"` | |||||
| DeletedAt timeutil.TimeStamp `xorm:"deleted"` | |||||
| } | |||||
| type GetMedalOpts struct { | |||||
| MedalType MedalType | |||||
| } | |||||
| type MedalAndCategory struct { | |||||
| Medal Medal `xorm:"extends"` | |||||
| Category MedalCategory `xorm:"extends"` | |||||
| } | |||||
| func (*MedalAndCategory) TableName() string { | |||||
| return "medal" | |||||
| } | |||||
| func (m *MedalAndCategory) ToShow() *Medal4Show { | |||||
| return &Medal4Show{ | |||||
| ID: m.Medal.ID, | |||||
| Name: m.Medal.Name, | |||||
| LightedIcon: m.Medal.LightedIcon, | |||||
| GreyedIcon: m.Medal.GreyedIcon, | |||||
| Url: m.Medal.Url, | |||||
| CategoryName: m.Category.Name, | |||||
| CategoryId: m.Category.ID, | |||||
| CreatedUnix: m.Medal.CreatedUnix, | |||||
| UpdatedUnix: m.Medal.UpdatedUnix, | |||||
| } | |||||
| } | |||||
| type Medal4Show struct { | |||||
| ID int64 | |||||
| Name string | |||||
| LightedIcon string | |||||
| GreyedIcon string | |||||
| Url string | |||||
| CategoryName string | |||||
| CategoryId int64 | |||||
| CreatedUnix timeutil.TimeStamp | |||||
| UpdatedUnix timeutil.TimeStamp | |||||
| } | |||||
| func (m Medal4Show) ToDTO() Medal { | |||||
| return Medal{ | |||||
| Name: m.Name, | |||||
| LightedIcon: m.LightedIcon, | |||||
| GreyedIcon: m.GreyedIcon, | |||||
| Url: m.Url, | |||||
| CategoryId: m.CategoryId, | |||||
| } | |||||
| } | |||||
| func GetMedalList(opts GetMedalOpts) ([]*MedalAndCategory, error) { | |||||
| var cond = builder.NewCond() | |||||
| if opts.MedalType > 0 { | |||||
| cond = cond.And(builder.Eq{"medal_category.type": opts.MedalType}) | |||||
| } | |||||
| r := make([]*MedalAndCategory, 0) | |||||
| if err := x.Join("INNER", "medal_category", "medal_category.ID = medal.category_id").Where(cond).OrderBy("medal.created_unix desc").Find(&r); err != nil { | |||||
| return nil, err | |||||
| } | |||||
| return r, nil | |||||
| } | |||||
| func AddMedal(m Medal) (int64, error) { | |||||
| return x.Insert(&m) | |||||
| } | |||||
| func UpdateMedalById(id int64, param Medal) (int64, error) { | |||||
| return x.ID(id).Update(¶m) | |||||
| } | |||||
| func DelMedal(id int64) (int64, error) { | |||||
| return x.ID(id).Delete(&Medal{}) | |||||
| } | |||||
| func GetMedalById(id int64) (*Medal, error) { | |||||
| m := &Medal{} | |||||
| has, err := x.ID(id).Get(m) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } else if !has { | |||||
| return nil, &ErrRecordNotExist{} | |||||
| } | |||||
| return m, nil | |||||
| } | |||||
| @@ -0,0 +1,79 @@ | |||||
| package models | |||||
| import "code.gitea.io/gitea/modules/timeutil" | |||||
| type MedalType int | |||||
| const ( | |||||
| CustomizeMedal = iota + 1 | |||||
| SystemMedal | |||||
| ) | |||||
| type MedalCategory struct { | |||||
| ID int64 `xorm:"pk autoincr"` | |||||
| Name string | |||||
| Position int64 | |||||
| Type MedalType | |||||
| CreatedUnix timeutil.TimeStamp `xorm:"created"` | |||||
| UpdatedUnix timeutil.TimeStamp `xorm:"updated"` | |||||
| DeletedAt timeutil.TimeStamp `xorm:"deleted"` | |||||
| } | |||||
| func (m *MedalCategory) ToShow() *MedalCategory4Show { | |||||
| return &MedalCategory4Show{ | |||||
| ID: m.ID, | |||||
| Name: m.Name, | |||||
| Position: m.Position, | |||||
| Type: m.Type, | |||||
| CreatedUnix: m.CreatedUnix, | |||||
| } | |||||
| } | |||||
| type MedalCategory4Show struct { | |||||
| ID int64 `xorm:"pk autoincr"` | |||||
| Name string | |||||
| Position int64 | |||||
| Type MedalType | |||||
| CreatedUnix timeutil.TimeStamp `xorm:"created"` | |||||
| } | |||||
| func (m MedalCategory4Show) ToDTO() MedalCategory { | |||||
| return MedalCategory{ | |||||
| ID: m.ID, | |||||
| Name: m.Name, | |||||
| Position: m.Position, | |||||
| Type: m.Type, | |||||
| CreatedUnix: m.CreatedUnix, | |||||
| } | |||||
| } | |||||
| func GetMedalCategoryList() ([]*MedalCategory, error) { | |||||
| r := make([]*MedalCategory, 0) | |||||
| if err := x.OrderBy("position asc,created_unix desc").Find(&r); err != nil { | |||||
| return nil, err | |||||
| } | |||||
| return r, nil | |||||
| } | |||||
| func AddMedalCategory(m MedalCategory) (int64, error) { | |||||
| return x.Insert(&m) | |||||
| } | |||||
| func UpdateMedalCategoryById(id int64, param MedalCategory) (int64, error) { | |||||
| return x.ID(id).Update(¶m) | |||||
| } | |||||
| func DelMedalCategory(id int64) (int64, error) { | |||||
| return x.ID(id).Delete(&MedalCategory{}) | |||||
| } | |||||
| func GetMedalCategoryById(id int64) (*MedalCategory, error) { | |||||
| m := &MedalCategory{} | |||||
| has, err := x.ID(id).Get(m) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } else if !has { | |||||
| return nil, &ErrRecordNotExist{} | |||||
| } | |||||
| return m, nil | |||||
| } | |||||
| @@ -161,6 +161,8 @@ func init() { | |||||
| new(CloudbrainSpec), | new(CloudbrainSpec), | ||||
| new(CloudbrainTemp), | new(CloudbrainTemp), | ||||
| new(DatasetReference), | new(DatasetReference), | ||||
| new(MedalCategory), | |||||
| new(Medal), | |||||
| ) | ) | ||||
| tablesStatistic = append(tablesStatistic, | tablesStatistic = append(tablesStatistic, | ||||
| @@ -0,0 +1,10 @@ | |||||
| package models | |||||
| import "code.gitea.io/gitea/modules/timeutil" | |||||
| type UserMedal struct { | |||||
| ID int64 `xorm:"pk autoincr"` | |||||
| UserId int64 `xorm:"index"` | |||||
| MedalId int64 `xorm:"index"` | |||||
| CreatedUnix timeutil.TimeStamp `xorm:"created"` | |||||
| } | |||||
| @@ -0,0 +1,46 @@ | |||||
| package medal | |||||
| import ( | |||||
| "code.gitea.io/gitea/models" | |||||
| "code.gitea.io/gitea/modules/context" | |||||
| "code.gitea.io/gitea/modules/log" | |||||
| "code.gitea.io/gitea/routers/response" | |||||
| "code.gitea.io/gitea/services/medal" | |||||
| "errors" | |||||
| "net/http" | |||||
| ) | |||||
| func GetCategoryList(ctx *context.Context) { | |||||
| r, err := medal.GetMedalCategoryList() | |||||
| if err != nil { | |||||
| log.Error("GetCategoryList error.%v", err) | |||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | |||||
| return | |||||
| } | |||||
| m := make(map[string]interface{}) | |||||
| m["List"] = r | |||||
| ctx.JSON(http.StatusOK, response.SuccessWithData(m)) | |||||
| } | |||||
| func OperateMedalCategory(ctx *context.Context, category models.MedalCategory4Show) { | |||||
| action := ctx.Params(":action") | |||||
| var err error | |||||
| switch action { | |||||
| case "edit": | |||||
| err = medal.EditMedalCategory(category, ctx.User) | |||||
| case "new": | |||||
| err = medal.AddMedalCategory(category, ctx.User) | |||||
| case "del": | |||||
| err = medal.DelMedalCategory(category.ID, ctx.User) | |||||
| default: | |||||
| err = errors.New("action type error") | |||||
| } | |||||
| if err != nil { | |||||
| log.Error("OperateMedalCategory error ,%v", err) | |||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | |||||
| return | |||||
| } | |||||
| ctx.JSON(http.StatusOK, response.Success()) | |||||
| } | |||||
| @@ -0,0 +1,46 @@ | |||||
| package medal | |||||
| import ( | |||||
| "code.gitea.io/gitea/models" | |||||
| "code.gitea.io/gitea/modules/context" | |||||
| "code.gitea.io/gitea/modules/log" | |||||
| "code.gitea.io/gitea/routers/response" | |||||
| "code.gitea.io/gitea/services/medal" | |||||
| "errors" | |||||
| "net/http" | |||||
| ) | |||||
| func GetCustomizeMedalList(ctx *context.Context) { | |||||
| r, err := medal.GetMedalList(models.GetMedalOpts{MedalType: models.CustomizeMedal}) | |||||
| if err != nil { | |||||
| log.Error("GetCategoryList error.%v", err) | |||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | |||||
| return | |||||
| } | |||||
| m := make(map[string]interface{}) | |||||
| m["List"] = r | |||||
| ctx.JSON(http.StatusOK, response.SuccessWithData(m)) | |||||
| } | |||||
| func OperateMedal(ctx *context.Context, category models.Medal4Show) { | |||||
| action := ctx.Params(":action") | |||||
| var err error | |||||
| switch action { | |||||
| case "edit": | |||||
| err = medal.EditMedal(category, ctx.User) | |||||
| case "new": | |||||
| err = medal.AddMedal(category, ctx.User) | |||||
| case "del": | |||||
| err = medal.DelMedal(category.ID, ctx.User) | |||||
| default: | |||||
| err = errors.New("action type error") | |||||
| } | |||||
| if err != nil { | |||||
| log.Error("OperateCustomizeMedal error ,%v", err) | |||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | |||||
| return | |||||
| } | |||||
| ctx.JSON(http.StatusOK, response.Success()) | |||||
| } | |||||
| @@ -6,6 +6,7 @@ package routes | |||||
| import ( | import ( | ||||
| "bytes" | "bytes" | ||||
| "code.gitea.io/gitea/routers/medal" | |||||
| "code.gitea.io/gitea/routers/reward/point" | "code.gitea.io/gitea/routers/reward/point" | ||||
| "code.gitea.io/gitea/routers/task" | "code.gitea.io/gitea/routers/task" | ||||
| "code.gitea.io/gitea/services/reward" | "code.gitea.io/gitea/services/reward" | ||||
| @@ -659,9 +660,20 @@ 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/batch", bindIgnErr(models.BatchLimitConfigVO{}), task.BatchAddTaskConfig) | |||||
| m.Post("/^:action(new|edit|del)$", bindIgnErr(models.TaskConfigWithLimit{}), task.OperateTaskConfig) | m.Post("/^:action(new|edit|del)$", bindIgnErr(models.TaskConfigWithLimit{}), task.OperateTaskConfig) | ||||
| }) | }) | ||||
| m.Group("/medal", func() { | |||||
| m.Group("/category", func() { | |||||
| m.Get("/list", medal.GetCategoryList) | |||||
| m.Post("/^:action(new|edit|del)$", bindIgnErr(models.MedalCategory4Show{}), medal.OperateMedalCategory) | |||||
| }) | |||||
| m.Group("/customize", func() { | |||||
| m.Get("/list", medal.GetCustomizeMedalList) | |||||
| }) | |||||
| m.Post("/^:action(new|edit|del)$", bindIgnErr(models.Medal4Show{}), medal.OperateMedal) | |||||
| }) | |||||
| }, operationReq) | }, operationReq) | ||||
| // ***** END: Operation ***** | // ***** END: Operation ***** | ||||
| @@ -4,6 +4,13 @@ import ( | |||||
| "code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
| ) | ) | ||||
| type LogBizType string | |||||
| const ( | |||||
| MedalCategoryOperate LogBizType = "MedalCategoryOperate" | |||||
| MedalOperate LogBizType = "MedalOperate" | |||||
| ) | |||||
| func Log(log models.AdminOperateLog) error { | func Log(log models.AdminOperateLog) error { | ||||
| _, err := models.InsertAdminOperateLog(log) | _, err := models.InsertAdminOperateLog(log) | ||||
| return err | return err | ||||
| @@ -12,3 +19,34 @@ func Log(log models.AdminOperateLog) error { | |||||
| func NewLogValues() *models.LogValues { | func NewLogValues() *models.LogValues { | ||||
| return &models.LogValues{Params: make([]models.LogValue, 0)} | return &models.LogValues{Params: make([]models.LogValue, 0)} | ||||
| } | } | ||||
| func Log4Add(bizType LogBizType, newValue interface{}, doerId int64, comment string) { | |||||
| Log(models.AdminOperateLog{ | |||||
| BizType: string(bizType), | |||||
| OperateType: "add", | |||||
| NewValue: NewLogValues().Add("new", newValue).JsonString(), | |||||
| CreatedBy: doerId, | |||||
| Comment: comment, | |||||
| }) | |||||
| } | |||||
| func Log4Edit(bizType LogBizType, oldValue interface{}, newValue interface{}, doerId int64, comment string) { | |||||
| Log(models.AdminOperateLog{ | |||||
| BizType: string(bizType), | |||||
| OperateType: "edit", | |||||
| NewValue: NewLogValues().Add("new", newValue).JsonString(), | |||||
| OldValue: NewLogValues().Add("old", oldValue).JsonString(), | |||||
| CreatedBy: doerId, | |||||
| Comment: comment, | |||||
| }) | |||||
| } | |||||
| func Log4Del(bizType LogBizType, oldValue interface{}, doerId int64, comment string) { | |||||
| Log(models.AdminOperateLog{ | |||||
| BizType: string(bizType), | |||||
| OperateType: "del", | |||||
| OldValue: NewLogValues().Add("old", oldValue).JsonString(), | |||||
| CreatedBy: doerId, | |||||
| Comment: comment, | |||||
| }) | |||||
| } | |||||
| @@ -0,0 +1,64 @@ | |||||
| package medal | |||||
| import ( | |||||
| "code.gitea.io/gitea/models" | |||||
| "code.gitea.io/gitea/modules/log" | |||||
| "code.gitea.io/gitea/services/admin/operate_log" | |||||
| "errors" | |||||
| ) | |||||
| func GetMedalCategoryList() ([]*models.MedalCategory4Show, error) { | |||||
| list, err := models.GetMedalCategoryList() | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| if len(list) == 0 { | |||||
| return nil, nil | |||||
| } | |||||
| r := make([]*models.MedalCategory4Show, len(list)) | |||||
| for i := 0; i < len(list); i++ { | |||||
| r[i] = list[i].ToShow() | |||||
| } | |||||
| return r, nil | |||||
| } | |||||
| func AddMedalCategory(m models.MedalCategory4Show, doer *models.User) error { | |||||
| _, err := models.AddMedalCategory(m.ToDTO()) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| operate_log.Log4Add(operate_log.MedalCategoryOperate, m, doer.ID, "新增了勋章分类") | |||||
| return nil | |||||
| } | |||||
| func EditMedalCategory(m models.MedalCategory4Show, doer *models.User) error { | |||||
| if m.ID == 0 { | |||||
| log.Error(" EditMedalCategory param error") | |||||
| return errors.New("param error") | |||||
| } | |||||
| old, err := models.GetMedalCategoryById(m.ID) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| _, err = models.UpdateMedalCategoryById(m.ID, m.ToDTO()) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| operate_log.Log4Edit(operate_log.MedalCategoryOperate, old, m.ToDTO(), doer.ID, "修改了勋章分类") | |||||
| return err | |||||
| } | |||||
| func DelMedalCategory(id int64, doer *models.User) error { | |||||
| if id == 0 { | |||||
| log.Error(" DelMedalCategory param error") | |||||
| return errors.New("param error") | |||||
| } | |||||
| old, err := models.GetMedalCategoryById(id) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| _, err = models.DelMedalCategory(id) | |||||
| operate_log.Log4Del(operate_log.MedalCategoryOperate, old, doer.ID, "删除了勋章分类") | |||||
| return err | |||||
| } | |||||
| @@ -0,0 +1,64 @@ | |||||
| package medal | |||||
| import ( | |||||
| "code.gitea.io/gitea/models" | |||||
| "code.gitea.io/gitea/modules/log" | |||||
| "code.gitea.io/gitea/services/admin/operate_log" | |||||
| "errors" | |||||
| ) | |||||
| func GetMedalList(opts models.GetMedalOpts) ([]*models.Medal4Show, error) { | |||||
| list, err := models.GetMedalList(opts) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| if len(list) == 0 { | |||||
| return nil, nil | |||||
| } | |||||
| r := make([]*models.Medal4Show, len(list)) | |||||
| for i := 0; i < len(list); i++ { | |||||
| r[i] = list[i].ToShow() | |||||
| } | |||||
| return r, nil | |||||
| } | |||||
| func AddMedal(m models.Medal4Show, doer *models.User) error { | |||||
| _, err := models.AddMedal(m.ToDTO()) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| operate_log.Log4Add(operate_log.MedalOperate, m, doer.ID, "新增了勋章") | |||||
| return nil | |||||
| } | |||||
| func EditMedal(m models.Medal4Show, doer *models.User) error { | |||||
| if m.ID == 0 { | |||||
| log.Error(" EditMedal param error") | |||||
| return errors.New("param error") | |||||
| } | |||||
| old, err := models.GetMedalById(m.ID) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| _, err = models.UpdateMedalById(m.ID, m.ToDTO()) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| operate_log.Log4Edit(operate_log.MedalOperate, old, m.ToDTO(), doer.ID, "修改了勋章") | |||||
| return err | |||||
| } | |||||
| func DelMedal(id int64, doer *models.User) error { | |||||
| if id == 0 { | |||||
| log.Error(" DelMedal param error") | |||||
| return errors.New("param error") | |||||
| } | |||||
| old, err := models.GetMedalById(id) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| _, err = models.DelMedal(id) | |||||
| operate_log.Log4Del(operate_log.MedalOperate, old, doer.ID, "删除了勋章") | |||||
| return err | |||||
| } | |||||