package badge import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/log" ) func GetBadgeUsers(badgeId int64, opts models.ListOptions) (int64, []*models.BadgeUser4SHow, error) { total, list, err := models.GetBadgeUsers(badgeId, opts) if err != nil { return 0, nil, err } if len(list) == 0 { return 0, nil, nil } r := make([]*models.BadgeUser4SHow, len(list)) for i := 0; i < len(list); i++ { r[i] = list[i].ToShow() } return total, r, nil } func AddBadgeUsers(badgeId int64, userNames []string) (int, error) { userIds := models.GetUserIdsByUserNames(userNames) if len(userIds) == 0 { return 0, nil } successCount := 0 for _, v := range userIds { m := models.BadgeUser{ UserId: v, BadgeId: badgeId, } _, err := models.AddBadgeUser(m) if err != nil { log.Error("AddBadgeUser err in loop, m=%+v. e=%v", m, err) continue } successCount++ } return successCount, nil } func DelBadgeUser(id int64) error { _, err := models.DelBadgeUser(id) return err } //GetUserBadges Only Returns badges the user has earned func GetUserBadges(userId int64, opts models.ListOptions) ([]*models.Badge4UserShow, error) { badges, err := models.GetUserBadgesPaging(userId, models.GetUserBadgesOpts{ListOptions: opts}) if err != nil { return nil, err } r := make([]*models.Badge4UserShow, len(badges)) for i, v := range badges { r[i] = v.ToUserShow() } return r, nil } func CountUserBadges(userId int64) (int64, error) { return models.CountUserBadges(userId) } func GetUserAllBadges(userId int64) ([]models.UserAllBadgeInCategory, error) { categoryList, err := models.GetBadgeCategoryList() if err != nil { return nil, err } r := make([]models.UserAllBadgeInCategory, 0) for _, v := range categoryList { badges, err := models.GetBadgeByCategoryId(v.ID) if badges == nil || len(badges) == 0 { continue } userBadgeMap, err := getUserBadgesMap(userId, v.ID) if err != nil { return nil, err } t := models.UserAllBadgeInCategory{ CategoryName: v.Name, CategoryId: v.ID, LightedNum: len(userBadgeMap), } bArray := make([]*models.BadgeShowWithStatus, len(badges)) for j, v := range badges { b := &models.BadgeShowWithStatus{Badge: v.ToUserShow()} if _, has := userBadgeMap[v.ID]; has { b.IsLighted = true } bArray[j] = b } t.Badges = bArray r = append(r, t) } return r, nil } func getUserBadgesMap(userId, categoryId int64) (map[int64]*models.Badge, error) { userBadges, err := models.GetUserBadges(userId, categoryId) if err != nil { return nil, err } m := make(map[int64]*models.Badge, 0) for _, v := range userBadges { m[v.ID] = v } return m, nil }