You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

user.go 2.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package badge
  2. import (
  3. "code.gitea.io/gitea/models"
  4. "code.gitea.io/gitea/modules/log"
  5. )
  6. func GetBadgeUsers(badgeId int64, opts models.ListOptions) ([]*models.BadgeUser4SHow, error) {
  7. list, err := models.GetBadgeUsers(badgeId, opts)
  8. if err != nil {
  9. return nil, err
  10. }
  11. if len(list) == 0 {
  12. return nil, nil
  13. }
  14. r := make([]*models.BadgeUser4SHow, len(list))
  15. for i := 0; i < len(list); i++ {
  16. r[i] = list[i].ToShow()
  17. }
  18. return r, nil
  19. }
  20. func AddBadgeUsers(badgeId int64, userNames []string) (int, error) {
  21. userIds := models.GetUserIdsByUserNames(userNames)
  22. if len(userIds) == 0 {
  23. return 0, nil
  24. }
  25. successCount := 0
  26. for _, v := range userIds {
  27. m := models.BadgeUser{
  28. UserId: v,
  29. BadgeId: badgeId,
  30. }
  31. _, err := models.AddBadgeUser(m)
  32. if err != nil {
  33. log.Error("AddBadgeUser err in loop, m=%+v. e=%v", m, err)
  34. continue
  35. }
  36. successCount++
  37. }
  38. return successCount, nil
  39. }
  40. func DelBadgeUser(id int64) error {
  41. _, err := models.DelBadgeUser(id)
  42. return err
  43. }
  44. //GetUserBadges Only Returns badges the user has earned
  45. func GetUserBadges(userId int64, opts models.ListOptions) ([]*models.Badge4UserShow, error) {
  46. badges, err := models.GetUserBadges(userId, models.GetUserBadgesOpts{ListOptions: opts})
  47. if err != nil {
  48. return nil, err
  49. }
  50. r := make([]*models.Badge4UserShow, len(badges))
  51. for i, v := range badges {
  52. r[i] = v.ToUserShow()
  53. }
  54. return r, nil
  55. }
  56. func GetUserAllBadges(userId int64) ([]models.UserAllBadgeInCategory, error) {
  57. categoryList, err := models.GetBadgeCategoryList()
  58. if err != nil {
  59. return nil, err
  60. }
  61. r := make([]models.UserAllBadgeInCategory, len(categoryList))
  62. for i, v := range categoryList {
  63. badges, err := models.GetBadgeByCategoryId(v.ID)
  64. userBadgeMap, err := getUserBadgesMap(userId, v.ID, 100, 1)
  65. if err != nil {
  66. return nil, err
  67. }
  68. t := models.UserAllBadgeInCategory{
  69. CategoryName: v.Name,
  70. CategoryId: v.ID,
  71. LightedNum: len(userBadgeMap),
  72. }
  73. bArray := make([]*models.BadgeShowWithStatus, len(badges))
  74. for j, v := range badges {
  75. b := &models.BadgeShowWithStatus{Badge: v.ToUserShow()}
  76. if _, has := userBadgeMap[v.ID]; has {
  77. b.IsLighted = true
  78. }
  79. bArray[j] = b
  80. }
  81. t.Badges = bArray
  82. r[i] = t
  83. }
  84. return r, nil
  85. }
  86. func getUserBadgesMap(userId, categoryId int64, pageSize, page int) (map[int64]*models.Badge, error) {
  87. userBadges, err := models.GetUserBadges(userId, models.GetUserBadgesOpts{ListOptions: models.ListOptions{PageSize: pageSize, Page: page}, CategoryId: categoryId})
  88. if err != nil {
  89. return nil, err
  90. }
  91. m := make(map[int64]*models.Badge, 0)
  92. for _, v := range userBadges {
  93. m[v.ID] = v
  94. }
  95. return m, nil
  96. }