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.

badge_user.go 3.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package models
  2. import (
  3. "code.gitea.io/gitea/modules/timeutil"
  4. "xorm.io/builder"
  5. )
  6. const (
  7. ActionAddBadgeUser = 1
  8. ActionDelBadgeUser = 2
  9. )
  10. type BadgeUser struct {
  11. ID int64 `xorm:"pk autoincr"`
  12. UserId int64 `xorm:"unique(user_badge)"`
  13. BadgeId int64 `xorm:"unique(user_badge) index"`
  14. CreatedUnix timeutil.TimeStamp `xorm:"created index"`
  15. }
  16. type BadgeUserLog struct {
  17. ID int64 `xorm:"pk autoincr"`
  18. UserId int64 `xorm:"index"`
  19. BadgeId int64 `xorm:"index"`
  20. Action int
  21. CreatedUnix timeutil.TimeStamp `xorm:"created index"`
  22. }
  23. type BadgeUserDetail struct {
  24. BadgeUser BadgeUser `xorm:"extends"`
  25. User User `xorm:"extends"`
  26. }
  27. func (*BadgeUserDetail) TableName() string {
  28. return "badge_user"
  29. }
  30. func (m *BadgeUserDetail) ToShow() *BadgeUser4SHow {
  31. return &BadgeUser4SHow{
  32. ID: m.BadgeUser.ID,
  33. UserId: m.BadgeUser.UserId,
  34. Name: m.User.Name,
  35. Avatar: m.User.RelAvatarLink(),
  36. Email: m.User.Email,
  37. CreatedUnix: m.BadgeUser.CreatedUnix,
  38. }
  39. }
  40. type BadgeUser4SHow struct {
  41. ID int64
  42. UserId int64
  43. Name string
  44. Avatar string
  45. Email string
  46. CreatedUnix timeutil.TimeStamp
  47. }
  48. type AddBadgeUsersReq struct {
  49. BadgeId int64
  50. Users string
  51. }
  52. type DelBadgeUserReq struct {
  53. ID int64
  54. }
  55. type GetUserBadgesOpts struct {
  56. CategoryId int64
  57. ListOptions
  58. }
  59. func AddBadgeUser(m BadgeUser) (int64, error) {
  60. sess := x.NewSession()
  61. defer sess.Close()
  62. sess.Begin()
  63. n, err := sess.Insert(&m)
  64. if err != nil || n == 0 {
  65. return 0, err
  66. }
  67. _, err = sess.Insert(&BadgeUserLog{
  68. UserId: m.UserId,
  69. BadgeId: m.BadgeId,
  70. Action: ActionAddBadgeUser,
  71. })
  72. if err != nil {
  73. sess.Rollback()
  74. return 0, err
  75. }
  76. return n, sess.Commit()
  77. }
  78. func DelBadgeUser(id int64) (int64, error) {
  79. m := BadgeUser{}
  80. has, err := x.ID(id).Get(&m)
  81. if err != nil {
  82. return 0, err
  83. }
  84. if !has {
  85. return 0, ErrRecordNotExist{}
  86. }
  87. sess := x.NewSession()
  88. defer sess.Close()
  89. sess.Begin()
  90. n, err := x.ID(m.ID).Delete(&BadgeUser{})
  91. if err != nil || n == 0 {
  92. return 0, err
  93. }
  94. _, err = sess.Insert(&BadgeUserLog{
  95. UserId: m.UserId,
  96. BadgeId: m.BadgeId,
  97. Action: ActionDelBadgeUser,
  98. })
  99. if err != nil {
  100. sess.Rollback()
  101. return 0, err
  102. }
  103. return n, sess.Commit()
  104. }
  105. func GetBadgeUsers(badgeId int64, opts ListOptions) (int64, []BadgeUserDetail, error) {
  106. n, err := x.Join("LEFT", "public.user", "public.user.ID = badge_user.user_id").Where("badge_user.badge_id = ?", badgeId).Count(&BadgeUserDetail{})
  107. if err != nil {
  108. return 0, nil, err
  109. }
  110. if opts.Page <= 0 {
  111. opts.Page = 1
  112. }
  113. m := make([]BadgeUserDetail, 0)
  114. err = x.Join("LEFT", "public.user", "public.user.ID = badge_user.user_id").Where("badge_user.badge_id = ?", badgeId).OrderBy("badge_user.id desc").Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).Find(&m)
  115. if err != nil {
  116. return 0, nil, err
  117. }
  118. return n, m, nil
  119. }
  120. func GetUserBadgesPaging(userId int64, opts GetUserBadgesOpts) ([]*Badge, error) {
  121. cond := builder.NewCond()
  122. cond = cond.And(builder.Eq{"badge_user.user_id": userId})
  123. if opts.CategoryId > 0 {
  124. cond = cond.And(builder.Eq{"badge.category_id": opts.CategoryId})
  125. }
  126. r := make([]*Badge, 0)
  127. err := x.Join("INNER", "badge_user", "badge_user.badge_id = badge.id").Where(cond).OrderBy("badge_user.id desc").Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).Find(&r)
  128. return r, err
  129. }
  130. func CountUserBadges(userId int64) (int64, error) {
  131. return x.Where("user_id = ?", userId).Count(&BadgeUser{})
  132. }
  133. func GetUserBadges(userId, categoryId int64) ([]*Badge, error) {
  134. cond := builder.NewCond()
  135. cond = cond.And(builder.Eq{"badge_user.user_id": userId})
  136. if categoryId > 0 {
  137. cond = cond.And(builder.Eq{"badge.category_id": categoryId})
  138. }
  139. r := make([]*Badge, 0)
  140. err := x.Join("INNER", "badge_user", "badge_user.badge_id = badge.id").Where(cond).OrderBy("badge_user.created_unix desc").Find(&r)
  141. return r, err
  142. }