adminuser.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package repository
  2. import (
  3. "fmt"
  4. "github.com/pkg/errors"
  5. "gorm.io/gorm"
  6. "sghgogs.com/micro/shopping-service/domain/model/base"
  7. req "sghgogs.com/micro/shopping-service/domain/model/request"
  8. pb "sghgogs.com/micro/shopping-service/proto"
  9. "sghgogs.com/micro/shopping-service/utils"
  10. )
  11. func (u *Repository) IsAdminUserExists(identifier interface{}) (bool, error) {
  12. var user req.User
  13. if err := u.db.
  14. Where("id = ? OR username = ?", identifier, identifier).
  15. Where("group_id", utils.AdminUserGroupID).
  16. Select("id, username").
  17. First(&user).Error; err != nil {
  18. if errors.Is(err, gorm.ErrRecordNotFound) {
  19. return false, nil // 记录不存在,账号不存在
  20. }
  21. return false, err // 发生其他错误
  22. }
  23. return true, nil
  24. }
  25. func (u *Repository) GetAdminUserList(query *pb.GetAdminUserListRequest) ([]*req.User, int64, error) {
  26. tx := u.db.Model(&req.User{}).
  27. Where("group_id", 1).
  28. Order("id desc")
  29. if query.Keyword != "" {
  30. tx.Where("username = ? OR phone_number = ?", query.Keyword, query.Keyword)
  31. }
  32. if base.IsStatusEnum(query.Status) {
  33. tx.Where("status = ?", query.Status)
  34. }
  35. var totalCount int64
  36. tx.Count(&totalCount)
  37. users := make([]*req.User, 0)
  38. return users, totalCount, tx.Limit(int(query.PageSize)).Offset(int((query.Page - 1) * query.PageSize)).Find(&users).Error
  39. }
  40. func (u *Repository) GetAllAdminUser() ([]*req.User, error) {
  41. users := make([]*req.User, 0)
  42. return users, u.db.Model(&req.User{}).
  43. Select("id, username").
  44. Where("group_id = ? AND status = ?", 1, pb.StatusEnum_ENABLED).
  45. Order("id desc").
  46. Find(&users).Error
  47. }
  48. func (u *Repository) GetAdminUser(userID int64) (*req.User, error) {
  49. var user *req.User
  50. return user, u.db.
  51. Where("id = ? AND status = ? AND group_id = ?", userID, pb.StatusEnum_ENABLED, utils.AdminUserGroupID).
  52. Select("id, username, phone_number, email, avatar, created_at, updated_at, status").
  53. Preload("Roles").
  54. Find(&user).Error
  55. }
  56. func (u *Repository) CreateAdminUser(roleIDs []int64, user *req.User) error {
  57. // 开始事务
  58. tx := u.db.Begin()
  59. // 错误处理
  60. defer func() {
  61. if r := recover(); r != nil {
  62. tx.Rollback()
  63. }
  64. }()
  65. result := tx.Model(&req.User{}).Create(&user)
  66. if err := result.Error; err != nil {
  67. tx.Rollback()
  68. return err
  69. }
  70. if len(roleIDs) > 0 {
  71. if _, err := u.getRoleValidIDs(roleIDs); err != nil {
  72. tx.Rollback()
  73. return err
  74. }
  75. roles := make([]req.Role, 0)
  76. for _, ID := range roleIDs {
  77. roles = append(roles, req.Role{ID: ID})
  78. }
  79. if err := tx.Model(&user).Association("Roles").Append(&roles); err != nil {
  80. tx.Rollback()
  81. return err
  82. }
  83. }
  84. return tx.Commit().Error
  85. }
  86. func (u *Repository) UpdateAdminUser(userID int64, roleIDs []int64, data map[string]interface{}) error {
  87. // 开始事务
  88. tx := u.db.Begin()
  89. // 错误处理
  90. defer func() {
  91. if r := recover(); r != nil {
  92. tx.Rollback()
  93. }
  94. }()
  95. var user req.User
  96. if err := tx.First(&user, userID).Error; err != nil {
  97. tx.Rollback()
  98. return err
  99. }
  100. if err := tx.Model(&user).Association("Roles").Clear(); err != nil {
  101. tx.Rollback()
  102. return err
  103. }
  104. // 角色关联
  105. if len(roleIDs) > 0 {
  106. if _, err := u.getRoleValidIDs(roleIDs); err != nil {
  107. tx.Rollback()
  108. return err
  109. }
  110. roles := make([]req.Role, 0)
  111. for _, ID := range roleIDs {
  112. roles = append(roles, req.Role{ID: ID})
  113. }
  114. if err := tx.Model(&user).Association("Roles").Append(&roles); err != nil {
  115. tx.Rollback()
  116. return err
  117. }
  118. }
  119. if err := tx.Model(&req.User{}).Where("id = ?", userID).Updates(data).Error; err != nil {
  120. tx.Rollback()
  121. return err
  122. }
  123. return tx.Commit().Error
  124. }
  125. func (u *Repository) ToggleAdminUser(userID int64, enum pb.StatusEnum, data map[string]interface{}) error {
  126. // pb.StatusEnum_DELETED {}
  127. fmt.Println("data", data)
  128. // 1. 开启事务
  129. tx := u.db.Begin()
  130. // 错误处理
  131. defer func() {
  132. if r := recover(); r != nil {
  133. tx.Rollback()
  134. }
  135. }()
  136. var user req.User
  137. // 1.查询角色
  138. if err := tx.First(&user, userID).Error; err != nil {
  139. tx.Rollback()
  140. return err
  141. }
  142. if enum == pb.StatusEnum_DELETED {
  143. // 1.1删除关联角色
  144. if err := tx.Model(&user).Association("Roles").Clear(); err != nil {
  145. tx.Rollback()
  146. return err
  147. }
  148. }
  149. // 2. 更新状态
  150. if err := tx.Model(&req.User{}).Where("id = ?", userID).Updates(data).Error; err != nil {
  151. tx.Rollback()
  152. return err
  153. }
  154. return tx.Commit().Error
  155. }
  156. func (u *Repository) DeleteAdminUser(userID int64) error {
  157. // 开始事务
  158. tx := u.db.Begin()
  159. // 错误处理
  160. defer func() {
  161. if r := recover(); r != nil {
  162. tx.Rollback()
  163. }
  164. }()
  165. var user req.User
  166. if err := tx.First(&user, userID).Error; err != nil {
  167. tx.Rollback()
  168. return err
  169. }
  170. if err := tx.Model(&user).Association("Roles").Clear(); err != nil {
  171. tx.Rollback()
  172. return err
  173. }
  174. if err := tx.Model(&req.User{}).Unscoped().Delete(&req.User{
  175. ID: userID,
  176. }).Error; err != nil {
  177. tx.Rollback()
  178. return err
  179. }
  180. return tx.Commit().Error
  181. }