From a83afede2f9ce44af13a37234c0f9fa433c9dfa6 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Fri, 14 Oct 2022 10:47:04 +0800 Subject: [PATCH] #2908 update --- models/badge.go | 14 +++++++++----- routers/badge/badge.go | 9 +++++---- routers/badge/category.go | 6 +++--- routers/response/response_list.go | 3 +++ services/badge/badge.go | 34 +++++++++++++++++++++------------- services/badge/category.go | 30 +++++++++++++++++++----------- 6 files changed, 60 insertions(+), 36 deletions(-) diff --git a/models/badge.go b/models/badge.go index 7e20ab2d4..fcfbdc27f 100644 --- a/models/badge.go +++ b/models/badge.go @@ -30,8 +30,9 @@ func (m *Badge) ToUserShow() *Badge4UserShow { } type GetBadgeOpts struct { - BadgeType BadgeType - LO ListOptions + BadgeType BadgeType + CategoryId int64 + ListOpts ListOptions } type BadgeAndCategory struct { @@ -118,19 +119,22 @@ type UserAllBadgeInCategory struct { } 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() if opts.BadgeType > 0 { 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{}) if err != nil { return 0, nil, err } 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 n, r, nil diff --git a/routers/badge/badge.go b/routers/badge/badge.go index 5e4efcdbf..6d8725b12 100644 --- a/routers/badge/badge.go +++ b/routers/badge/badge.go @@ -15,8 +15,9 @@ import ( func GetCustomizeBadgeList(ctx *context.Context) { page := ctx.QueryInt("page") + category := ctx.QueryInt64("category") 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 { log.Error("GetCustomizeBadgeList error.%v", err) 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) { action := ctx.Params(":action") - var err error + var err *response.BizError switch action { case "edit": err = badge.EditBadge(req, ctx.User) @@ -41,12 +42,12 @@ func OperateBadge(ctx *context.Context, req models.BadgeOperateReq) { case "del": err = badge.DelBadge(req.ID, ctx.User) default: - err = errors.New("action type error") + err = response.NewBizError(errors.New("action type error")) } if err != nil { log.Error("OperateBadge error ,%v", err) - ctx.JSON(http.StatusOK, response.ServerError(err.Error())) + ctx.JSON(http.StatusOK, response.ResponseError(err)) return } ctx.JSON(http.StatusOK, response.Success()) diff --git a/routers/badge/category.go b/routers/badge/category.go index 4ac85df4a..71c34e1ba 100644 --- a/routers/badge/category.go +++ b/routers/badge/category.go @@ -29,7 +29,7 @@ func GetBadgeCategoryList(ctx *context.Context) { func OperateBadgeCategory(ctx *context.Context, category models.BadgeCategory4Show) { action := ctx.Params(":action") - var err error + var err *response.BizError switch action { case "edit": err = badge.EditBadgeCategory(category, ctx.User) @@ -38,12 +38,12 @@ func OperateBadgeCategory(ctx *context.Context, category models.BadgeCategory4Sh case "del": err = badge.DelBadgeCategory(category.ID, ctx.User) default: - err = errors.New("action type error") + err = response.NewBizError(errors.New("action type error")) } if err != nil { log.Error("OperateBadgeCategory error ,%v", err) - ctx.JSON(http.StatusOK, response.ServerError(err.Error())) + ctx.JSON(http.StatusOK, response.ResponseError(err)) return } ctx.JSON(http.StatusOK, response.Success()) diff --git a/routers/response/response_list.go b/routers/response/response_list.go index 6514f3edd..8bdbf375c 100644 --- a/routers/response/response_list.go +++ b/routers/response/response_list.go @@ -3,3 +3,6 @@ package response 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_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"} diff --git a/services/badge/badge.go b/services/badge/badge.go index 0aefeca6e..c6f833f65 100644 --- a/services/badge/badge.go +++ b/services/badge/badge.go @@ -3,6 +3,7 @@ package badge import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/routers/response" "code.gitea.io/gitea/services/admin/operate_log" "errors" ) @@ -23,50 +24,57 @@ func GetBadgeList(opts models.GetBadgeOpts) (int64, []*models.Badge4AdminShow, e 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) if err != nil { 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()) if err != nil { - return err + return response.NewBizError(err) } operate_log.Log4Add(operate_log.BadgeOperate, m, doer.ID, "新增了勋章") 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 { log.Error(" EditBadge param error") - return errors.New("param error") + return response.NewBizError(errors.New("param error")) } old, err := models.GetBadgeById(m.ID) if err != nil { - return err + return response.NewBizError(err) } _, err = models.UpdateBadgeById(m.ID, m.ToDTO()) if err != nil { - return err + return response.NewBizError(err) } 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 { log.Error(" DelBadge param error") - return errors.New("param error") + return response.NewBizError(errors.New("param error")) } old, err := models.GetBadgeById(id) 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) operate_log.Log4Del(operate_log.BadgeOperate, old, doer.ID, "删除了勋章") - return err + return nil } diff --git a/services/badge/category.go b/services/badge/category.go index 14d06620a..445dedcad 100644 --- a/services/badge/category.go +++ b/services/badge/category.go @@ -3,6 +3,7 @@ package badge import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/routers/response" "code.gitea.io/gitea/services/admin/operate_log" "errors" ) @@ -23,42 +24,49 @@ func GetBadgeCategoryList(opts models.ListOptions) (int64, []*models.BadgeCatego 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()) if err != nil { - return err + return response.NewBizError(err) } operate_log.Log4Add(operate_log.BadgeCategoryOperate, m, doer.ID, "新增了勋章分类") 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 { log.Error(" EditBadgeCategory param error") - return errors.New("param error") + return response.NewBizError(errors.New("param error")) } old, err := models.GetBadgeCategoryById(m.ID) if err != nil { - return err + return response.NewBizError(err) } _, err = models.UpdateBadgeCategoryById(m.ID, m.ToDTO()) if err != nil { - return err + return response.NewBizError(err) } 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 { log.Error(" DelBadgeCategory param error") - return errors.New("param error") + return response.NewBizError(errors.New("param error")) } old, err := models.GetBadgeCategoryById(id) 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) operate_log.Log4Del(operate_log.BadgeCategoryOperate, old, doer.ID, "删除了勋章分类") - return err + return nil }