| @@ -30,8 +30,9 @@ func (m *Badge) ToUserShow() *Badge4UserShow { | |||||
| } | } | ||||
| type GetBadgeOpts struct { | type GetBadgeOpts struct { | ||||
| BadgeType BadgeType | |||||
| LO ListOptions | |||||
| BadgeType BadgeType | |||||
| CategoryId int64 | |||||
| ListOpts ListOptions | |||||
| } | } | ||||
| type BadgeAndCategory struct { | type BadgeAndCategory struct { | ||||
| @@ -118,19 +119,22 @@ type UserAllBadgeInCategory struct { | |||||
| } | } | ||||
| func GetBadgeList(opts GetBadgeOpts) (int64, []*BadgeAndCategory, error) { | func GetBadgeList(opts GetBadgeOpts) (int64, []*BadgeAndCategory, error) { | ||||
| if opts.LO.Page <= 0 { | |||||
| opts.LO.Page = 1 | |||||
| if opts.ListOpts.Page <= 0 { | |||||
| opts.ListOpts.Page = 1 | |||||
| } | } | ||||
| var cond = builder.NewCond() | var cond = builder.NewCond() | ||||
| if opts.BadgeType > 0 { | if opts.BadgeType > 0 { | ||||
| cond = cond.And(builder.Eq{"badge_category.type": opts.BadgeType}) | cond = cond.And(builder.Eq{"badge_category.type": opts.BadgeType}) | ||||
| } | } | ||||
| if opts.CategoryId > 0 { | |||||
| cond = cond.And(builder.Eq{"badge_category.id": opts.CategoryId}) | |||||
| } | |||||
| n, err := x.Join("INNER", "badge_category", "badge_category.ID = badge.category_id").Where(cond).Count(&BadgeAndCategory{}) | n, err := x.Join("INNER", "badge_category", "badge_category.ID = badge.category_id").Where(cond).Count(&BadgeAndCategory{}) | ||||
| if err != nil { | if err != nil { | ||||
| return 0, nil, err | return 0, nil, err | ||||
| } | } | ||||
| r := make([]*BadgeAndCategory, 0) | r := make([]*BadgeAndCategory, 0) | ||||
| if err = x.Join("INNER", "badge_category", "badge_category.ID = badge.category_id").Where(cond).OrderBy("badge.created_unix desc").Limit(opts.LO.PageSize, (opts.LO.Page-1)*opts.LO.PageSize).Find(&r); err != nil { | |||||
| if err = x.Join("INNER", "badge_category", "badge_category.ID = badge.category_id").Where(cond).OrderBy("badge.created_unix desc").Limit(opts.ListOpts.PageSize, (opts.ListOpts.Page-1)*opts.ListOpts.PageSize).Find(&r); err != nil { | |||||
| return 0, nil, err | return 0, nil, err | ||||
| } | } | ||||
| return n, r, nil | return n, r, nil | ||||
| @@ -15,8 +15,9 @@ import ( | |||||
| func GetCustomizeBadgeList(ctx *context.Context) { | func GetCustomizeBadgeList(ctx *context.Context) { | ||||
| page := ctx.QueryInt("page") | page := ctx.QueryInt("page") | ||||
| category := ctx.QueryInt64("category") | |||||
| pageSize := 50 | pageSize := 50 | ||||
| n, r, err := badge.GetBadgeList(models.GetBadgeOpts{BadgeType: models.CustomizeBadge, LO: models.ListOptions{PageSize: pageSize, Page: page}}) | |||||
| n, r, err := badge.GetBadgeList(models.GetBadgeOpts{CategoryId: category, BadgeType: models.CustomizeBadge, ListOpts: models.ListOptions{PageSize: pageSize, Page: page}}) | |||||
| if err != nil { | if err != nil { | ||||
| log.Error("GetCustomizeBadgeList error.%v", err) | log.Error("GetCustomizeBadgeList error.%v", err) | ||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | ||||
| @@ -32,7 +33,7 @@ func GetCustomizeBadgeList(ctx *context.Context) { | |||||
| func OperateBadge(ctx *context.Context, req models.BadgeOperateReq) { | func OperateBadge(ctx *context.Context, req models.BadgeOperateReq) { | ||||
| action := ctx.Params(":action") | action := ctx.Params(":action") | ||||
| var err error | |||||
| var err *response.BizError | |||||
| switch action { | switch action { | ||||
| case "edit": | case "edit": | ||||
| err = badge.EditBadge(req, ctx.User) | err = badge.EditBadge(req, ctx.User) | ||||
| @@ -41,12 +42,12 @@ func OperateBadge(ctx *context.Context, req models.BadgeOperateReq) { | |||||
| case "del": | case "del": | ||||
| err = badge.DelBadge(req.ID, ctx.User) | err = badge.DelBadge(req.ID, ctx.User) | ||||
| default: | default: | ||||
| err = errors.New("action type error") | |||||
| err = response.NewBizError(errors.New("action type error")) | |||||
| } | } | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("OperateBadge error ,%v", err) | log.Error("OperateBadge error ,%v", err) | ||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | |||||
| ctx.JSON(http.StatusOK, response.ResponseError(err)) | |||||
| return | return | ||||
| } | } | ||||
| ctx.JSON(http.StatusOK, response.Success()) | ctx.JSON(http.StatusOK, response.Success()) | ||||
| @@ -29,7 +29,7 @@ func GetBadgeCategoryList(ctx *context.Context) { | |||||
| func OperateBadgeCategory(ctx *context.Context, category models.BadgeCategory4Show) { | func OperateBadgeCategory(ctx *context.Context, category models.BadgeCategory4Show) { | ||||
| action := ctx.Params(":action") | action := ctx.Params(":action") | ||||
| var err error | |||||
| var err *response.BizError | |||||
| switch action { | switch action { | ||||
| case "edit": | case "edit": | ||||
| err = badge.EditBadgeCategory(category, ctx.User) | err = badge.EditBadgeCategory(category, ctx.User) | ||||
| @@ -38,12 +38,12 @@ func OperateBadgeCategory(ctx *context.Context, category models.BadgeCategory4Sh | |||||
| case "del": | case "del": | ||||
| err = badge.DelBadgeCategory(category.ID, ctx.User) | err = badge.DelBadgeCategory(category.ID, ctx.User) | ||||
| default: | default: | ||||
| err = errors.New("action type error") | |||||
| err = response.NewBizError(errors.New("action type error")) | |||||
| } | } | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("OperateBadgeCategory error ,%v", err) | log.Error("OperateBadgeCategory error ,%v", err) | ||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | |||||
| ctx.JSON(http.StatusOK, response.ResponseError(err)) | |||||
| return | return | ||||
| } | } | ||||
| ctx.JSON(http.StatusOK, response.Success()) | ctx.JSON(http.StatusOK, response.Success()) | ||||
| @@ -3,3 +3,6 @@ package response | |||||
| var RESOURCE_QUEUE_NOT_AVAILABLE = &BizError{Code: 1001, Err: "resource queue not available"} | var RESOURCE_QUEUE_NOT_AVAILABLE = &BizError{Code: 1001, Err: "resource queue not available"} | ||||
| var SPECIFICATION_NOT_EXIST = &BizError{Code: 1002, Err: "specification not exist"} | var SPECIFICATION_NOT_EXIST = &BizError{Code: 1002, Err: "specification not exist"} | ||||
| var SPECIFICATION_NOT_AVAILABLE = &BizError{Code: 1003, Err: "specification not available"} | var SPECIFICATION_NOT_AVAILABLE = &BizError{Code: 1003, Err: "specification not available"} | ||||
| var CATEGORY_STILL_HAS_BADGES = &BizError{Code: 1004, Err: "Please delete badges in the category first"} | |||||
| var BADGES_STILL_HAS_USERS = &BizError{Code: 1005, Err: "Please delete users of badge first"} | |||||
| @@ -3,6 +3,7 @@ package badge | |||||
| import ( | import ( | ||||
| "code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
| "code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
| "code.gitea.io/gitea/routers/response" | |||||
| "code.gitea.io/gitea/services/admin/operate_log" | "code.gitea.io/gitea/services/admin/operate_log" | ||||
| "errors" | "errors" | ||||
| ) | ) | ||||
| @@ -23,50 +24,57 @@ func GetBadgeList(opts models.GetBadgeOpts) (int64, []*models.Badge4AdminShow, e | |||||
| return total, r, nil | return total, r, nil | ||||
| } | } | ||||
| func AddBadge(m models.BadgeOperateReq, doer *models.User) error { | |||||
| func AddBadge(m models.BadgeOperateReq, doer *models.User) *response.BizError { | |||||
| _, err := models.GetBadgeCategoryById(m.CategoryId) | _, err := models.GetBadgeCategoryById(m.CategoryId) | ||||
| if err != nil { | if err != nil { | ||||
| if models.IsErrRecordNotExist(err) { | if models.IsErrRecordNotExist(err) { | ||||
| return errors.New("badge category is not available") | |||||
| return response.NewBizError(errors.New("badge category is not available")) | |||||
| } | } | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | } | ||||
| _, err = models.AddBadge(m.ToDTO()) | _, err = models.AddBadge(m.ToDTO()) | ||||
| if err != nil { | if err != nil { | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | } | ||||
| operate_log.Log4Add(operate_log.BadgeOperate, m, doer.ID, "新增了勋章") | operate_log.Log4Add(operate_log.BadgeOperate, m, doer.ID, "新增了勋章") | ||||
| return nil | return nil | ||||
| } | } | ||||
| func EditBadge(m models.BadgeOperateReq, doer *models.User) error { | |||||
| func EditBadge(m models.BadgeOperateReq, doer *models.User) *response.BizError { | |||||
| if m.ID == 0 { | if m.ID == 0 { | ||||
| log.Error(" EditBadge param error") | log.Error(" EditBadge param error") | ||||
| return errors.New("param error") | |||||
| return response.NewBizError(errors.New("param error")) | |||||
| } | } | ||||
| old, err := models.GetBadgeById(m.ID) | old, err := models.GetBadgeById(m.ID) | ||||
| if err != nil { | if err != nil { | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | } | ||||
| _, err = models.UpdateBadgeById(m.ID, m.ToDTO()) | _, err = models.UpdateBadgeById(m.ID, m.ToDTO()) | ||||
| if err != nil { | if err != nil { | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | } | ||||
| operate_log.Log4Edit(operate_log.BadgeOperate, old, m.ToDTO(), doer.ID, "修改了勋章") | operate_log.Log4Edit(operate_log.BadgeOperate, old, m.ToDTO(), doer.ID, "修改了勋章") | ||||
| return err | |||||
| return nil | |||||
| } | } | ||||
| func DelBadge(id int64, doer *models.User) error { | |||||
| func DelBadge(id int64, doer *models.User) *response.BizError { | |||||
| if id == 0 { | if id == 0 { | ||||
| log.Error(" DelBadge param error") | log.Error(" DelBadge param error") | ||||
| return errors.New("param error") | |||||
| return response.NewBizError(errors.New("param error")) | |||||
| } | } | ||||
| old, err := models.GetBadgeById(id) | old, err := models.GetBadgeById(id) | ||||
| if err != nil { | if err != nil { | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | |||||
| n, _, err := models.GetBadgeUsers(id, models.ListOptions{PageSize: 1, Page: 1}) | |||||
| if err != nil { | |||||
| return response.NewBizError(err) | |||||
| } | |||||
| if n > 0 { | |||||
| return response.BADGES_STILL_HAS_USERS | |||||
| } | } | ||||
| _, err = models.DelBadge(id) | _, err = models.DelBadge(id) | ||||
| operate_log.Log4Del(operate_log.BadgeOperate, old, doer.ID, "删除了勋章") | operate_log.Log4Del(operate_log.BadgeOperate, old, doer.ID, "删除了勋章") | ||||
| return err | |||||
| return nil | |||||
| } | } | ||||
| @@ -3,6 +3,7 @@ package badge | |||||
| import ( | import ( | ||||
| "code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
| "code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
| "code.gitea.io/gitea/routers/response" | |||||
| "code.gitea.io/gitea/services/admin/operate_log" | "code.gitea.io/gitea/services/admin/operate_log" | ||||
| "errors" | "errors" | ||||
| ) | ) | ||||
| @@ -23,42 +24,49 @@ func GetBadgeCategoryList(opts models.ListOptions) (int64, []*models.BadgeCatego | |||||
| return total, r, nil | return total, r, nil | ||||
| } | } | ||||
| func AddBadgeCategory(m models.BadgeCategory4Show, doer *models.User) error { | |||||
| func AddBadgeCategory(m models.BadgeCategory4Show, doer *models.User) *response.BizError { | |||||
| _, err := models.AddBadgeCategory(m.ToDTO()) | _, err := models.AddBadgeCategory(m.ToDTO()) | ||||
| if err != nil { | if err != nil { | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | } | ||||
| operate_log.Log4Add(operate_log.BadgeCategoryOperate, m, doer.ID, "新增了勋章分类") | operate_log.Log4Add(operate_log.BadgeCategoryOperate, m, doer.ID, "新增了勋章分类") | ||||
| return nil | return nil | ||||
| } | } | ||||
| func EditBadgeCategory(m models.BadgeCategory4Show, doer *models.User) error { | |||||
| func EditBadgeCategory(m models.BadgeCategory4Show, doer *models.User) *response.BizError { | |||||
| if m.ID == 0 { | if m.ID == 0 { | ||||
| log.Error(" EditBadgeCategory param error") | log.Error(" EditBadgeCategory param error") | ||||
| return errors.New("param error") | |||||
| return response.NewBizError(errors.New("param error")) | |||||
| } | } | ||||
| old, err := models.GetBadgeCategoryById(m.ID) | old, err := models.GetBadgeCategoryById(m.ID) | ||||
| if err != nil { | if err != nil { | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | } | ||||
| _, err = models.UpdateBadgeCategoryById(m.ID, m.ToDTO()) | _, err = models.UpdateBadgeCategoryById(m.ID, m.ToDTO()) | ||||
| if err != nil { | if err != nil { | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | } | ||||
| operate_log.Log4Edit(operate_log.BadgeCategoryOperate, old, m.ToDTO(), doer.ID, "修改了勋章分类") | operate_log.Log4Edit(operate_log.BadgeCategoryOperate, old, m.ToDTO(), doer.ID, "修改了勋章分类") | ||||
| return err | |||||
| return nil | |||||
| } | } | ||||
| func DelBadgeCategory(id int64, doer *models.User) error { | |||||
| func DelBadgeCategory(id int64, doer *models.User) *response.BizError { | |||||
| if id == 0 { | if id == 0 { | ||||
| log.Error(" DelBadgeCategory param error") | log.Error(" DelBadgeCategory param error") | ||||
| return errors.New("param error") | |||||
| return response.NewBizError(errors.New("param error")) | |||||
| } | } | ||||
| old, err := models.GetBadgeCategoryById(id) | old, err := models.GetBadgeCategoryById(id) | ||||
| if err != nil { | if err != nil { | ||||
| return err | |||||
| return response.NewBizError(err) | |||||
| } | |||||
| badges, err := models.GetBadgeByCategoryId(id) | |||||
| if err != nil { | |||||
| return response.NewBizError(err) | |||||
| } | |||||
| if len(badges) > 0 { | |||||
| return response.CATEGORY_STILL_HAS_BADGES | |||||
| } | } | ||||
| _, err = models.DelBadgeCategory(id) | _, err = models.DelBadgeCategory(id) | ||||
| operate_log.Log4Del(operate_log.BadgeCategoryOperate, old, doer.ID, "删除了勋章分类") | operate_log.Log4Del(operate_log.BadgeCategoryOperate, old, doer.ID, "删除了勋章分类") | ||||
| return err | |||||
| return nil | |||||
| } | } | ||||