adminuser.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/pkg/errors"
  6. "gorm.io/gorm"
  7. "net/http"
  8. "sghgogs.com/micro/common"
  9. "sghgogs.com/micro/common/errorcode"
  10. req "sghgogs.com/micro/shopping-service/domain/model/request"
  11. pb "sghgogs.com/micro/shopping-service/proto"
  12. "sghgogs.com/micro/shopping-service/utils"
  13. "time"
  14. )
  15. func (svc *Service) GetAdminUserList(params *pb.GetAdminUserListRequest) ([]*pb.User, int64, error) {
  16. users := make([]*pb.User, 0)
  17. list, count, err := svc.Repository.GetAdminUserList(params)
  18. if err != nil {
  19. if errors.Is(err, gorm.ErrRecordNotFound) {
  20. return users, 0, nil
  21. } else {
  22. return users, 0, err
  23. }
  24. }
  25. for _, item := range list {
  26. users = append(users, svc.getUserRes(item))
  27. }
  28. return users, count, nil
  29. }
  30. func (svc *Service) GetAllAdminUser() ([]*pb.Base, error) {
  31. bases := make([]*pb.Base, 0)
  32. user, err := svc.Repository.GetAllAdminUser()
  33. if err != nil {
  34. return bases, errorcode.New(svc.Namespace, err.Error(), 500)
  35. }
  36. for _, item := range user {
  37. bases = append(bases, &pb.Base{
  38. Key: item.Username,
  39. Value: fmt.Sprintf("%v", item.ID),
  40. })
  41. }
  42. return bases, nil
  43. }
  44. func (svc *Service) GetAdminUser(params *pb.GetAdminUserRequest) (*pb.User, error) {
  45. var rsp *pb.User
  46. if exists, err := svc.Repository.IsAdminUserExists(params.UserId); err != nil {
  47. return rsp, errorcode.New(svc.Namespace, err.Error(), 500)
  48. } else {
  49. if !exists {
  50. return rsp, errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  51. }
  52. }
  53. user, err := svc.Repository.GetAdminUser(params.UserId)
  54. if err != nil {
  55. return rsp, errorcode.New(svc.Namespace, err.Error(), 500)
  56. }
  57. res := svc.getUserRes(user)
  58. res.Roles = svc.getBaseRoleRes(user.Roles)
  59. return res, nil
  60. }
  61. func (svc *Service) CreateAdminUser(ctx context.Context, data *pb.CreateAdminUserRequest) error {
  62. password, _ := utils.HashPassword(data.Password)
  63. group, err := svc.GetUserGroup(&pb.GetUserGroupRequest{Code: "17a78673-9762-4e9e-8f87-595a049f75bf"})
  64. if err != nil {
  65. return err
  66. }
  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: group.Id,
  77. Status: pb.StatusEnum_ENABLED,
  78. }
  79. if err = svc.Repository.CreateAdminUser(data.Roles, &user); err != nil {
  80. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  81. }
  82. return nil
  83. }
  84. func (svc *Service) UpdateAdminUser(ctx context.Context, data *pb.UpdateAdminUserRequest) error {
  85. if exists, err := svc.Repository.IsAdminUserExists(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.UpdateAdminUser(data.UserId, data.Roles, svc.filterNilFields(m)); err != nil {
  101. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  102. }
  103. return nil
  104. }
  105. func (svc *Service) ToggleAdminUser(ctx context.Context, data *pb.ToggleAdminUserRequest) error {
  106. if exists, err := svc.Repository.IsAdminUserExists(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. _, by, _, _ := utils.ParseMetadata(ctx)
  114. if err := svc.Repository.ToggleAdminUser(data.UserId, data.Status, map[string]interface{}{
  115. "updated_at": time.Now(),
  116. "updated_by": by,
  117. "status": data.Status,
  118. }); err != nil {
  119. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  120. }
  121. return nil
  122. }
  123. func (svc *Service) DeleteAdminUser(data *pb.DeleteAdminUserRequest) error {
  124. if exists, err := svc.Repository.IsAdminUserExists(data.UserId); err != nil {
  125. return errorcode.New(svc.Namespace, err.Error(), 500)
  126. } else {
  127. if !exists {
  128. return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  129. }
  130. }
  131. if err := svc.Repository.DeleteAdminUser(data.UserId); err != nil {
  132. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  133. }
  134. return nil
  135. }