user.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package service
  2. import (
  3. "context"
  4. "github.com/pkg/errors"
  5. "gorm.io/gorm"
  6. "net/http"
  7. "sghgogs.com/micro/common"
  8. "sghgogs.com/micro/common/errorcode"
  9. req "sghgogs.com/micro/shopping-service/domain/model/request"
  10. pb "sghgogs.com/micro/shopping-service/proto"
  11. "sghgogs.com/micro/shopping-service/utils"
  12. "time"
  13. )
  14. func (svc *Service) GetUserList(query *pb.GetUserListRequest) ([]*pb.User, int64, error) {
  15. users := make([]*pb.User, 0)
  16. list, count, err := svc.Repository.GetUserList(query)
  17. if err != nil {
  18. if errors.Is(err, gorm.ErrRecordNotFound) {
  19. return users, 0, nil // 记录不存在,角色不存在
  20. } else {
  21. return users, 0, err
  22. }
  23. }
  24. for _, item := range list {
  25. users = append(users, svc.getUserRes(&item))
  26. }
  27. return users, count, nil
  28. }
  29. func (svc *Service) GetUser(query *pb.GetUserRequest) (*pb.User, error) {
  30. var rsp pb.User
  31. if exists, err := svc.Repository.IsUserExists(query.UserId); err != nil {
  32. return &rsp, errorcode.New(svc.Namespace, err.Error(), 500)
  33. } else {
  34. if !exists {
  35. return &rsp, errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  36. }
  37. }
  38. // CreateUser
  39. user, err := svc.Repository.GetUser(query.UserId)
  40. if err != nil {
  41. return &rsp, errorcode.New(svc.Namespace, err.Error(), 500)
  42. }
  43. res := svc.getUserRes(&user)
  44. // res.Roles = svc.getBaseRoleRes(user.Roles)
  45. return res, nil
  46. }
  47. func (svc *Service) CreateUser(ctx context.Context, data *pb.CreateUserRequest) error {
  48. if exists, err := svc.Repository.IsUserExists(data.Username); err != nil {
  49. return errorcode.New(svc.Namespace, err.Error(), 500)
  50. } else {
  51. if exists {
  52. return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  53. }
  54. }
  55. group, err := svc.Repository.GetUserGroup(&pb.GetUserGroupRequest{Code: data.Code})
  56. if err != nil {
  57. if errors.Is(err, gorm.ErrRecordNotFound) {
  58. return errorcode.New(svc.Namespace, common.ErrorMessage[common.NotAssignedError], 500)
  59. } else {
  60. return errorcode.New(svc.Namespace, err.Error(), 500)
  61. }
  62. }
  63. if group.ID != utils.UserUserGroupID {
  64. return errorcode.New(svc.Namespace, common.ErrorMessage[common.NotAssignedError], 500)
  65. }
  66. password, _ := utils.HashPassword(data.Password)
  67. _, by, _, _ := utils.ParseMetadata(ctx)
  68. user := req.User{
  69. Username: data.Username,
  70. Password: password,
  71. PhoneNumber: data.PhoneNumber,
  72. Email: data.Email,
  73. Avatar: data.Avatar,
  74. CreatedAt: time.Now(),
  75. CreatedBy: by,
  76. GroupID: utils.UserUserGroupID,
  77. Status: pb.StatusEnum_ENABLED,
  78. }
  79. if err = svc.Repository.CreateUser(&user); err != nil {
  80. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  81. }
  82. return nil
  83. }
  84. func (svc *Service) UpdateUser(ctx context.Context, data *pb.UpdateUserRequest) error {
  85. if exists, err := svc.Repository.IsUserExists(data.UserId); err != nil {
  86. return errorcode.New(svc.Namespace, err.Error(), 500)
  87. } else {
  88. if !exists {
  89. return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  90. }
  91. }
  92. _, by, _, _ := utils.ParseMetadata(ctx)
  93. m := map[string]interface{}{
  94. "email": data.Email,
  95. "avatar": data.Avatar,
  96. "phone_number": data.PhoneNumber,
  97. "updated_at": time.Now(),
  98. "updated_by": by,
  99. }
  100. if err := svc.Repository.UpdateUser(data.UserId, m); err != nil {
  101. return errorcode.New(svc.Namespace, err.Error(), 500)
  102. }
  103. return nil
  104. }
  105. func (svc *Service) DeleteUser(data *pb.DeleteUserRequest) error {
  106. if exists, err := svc.Repository.IsUserExists(data.UserId); err != nil {
  107. return errorcode.New(svc.Namespace, err.Error(), 500)
  108. } else {
  109. if !exists {
  110. return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  111. }
  112. }
  113. if err := svc.Repository.DeleteUser(data.UserId); err != nil {
  114. return errorcode.New(svc.Namespace, err.Error(), 500)
  115. }
  116. return nil
  117. }
  118. func (svc *Service) ToggleUser(ctx context.Context, data *pb.ToggleUserRequest) error {
  119. if exists, err := svc.Repository.IsUserExists(data.UserId); err != nil {
  120. return errorcode.New(svc.Namespace, err.Error(), 500)
  121. } else {
  122. if !exists {
  123. return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  124. }
  125. }
  126. _, by, _, _ := utils.ParseMetadata(ctx)
  127. if err := svc.Repository.ToggleAdminUser(data.UserId, data.Status, map[string]interface{}{
  128. "updated_at": time.Now(),
  129. "updated_by": by,
  130. "status": data.Status,
  131. }); err != nil {
  132. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  133. }
  134. return nil
  135. }