role.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package service
  2. import (
  3. "fmt"
  4. "github.com/pkg/errors"
  5. "golang.org/x/net/context"
  6. "gorm.io/gorm"
  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. "sghgogs.com/micro/shopping-service/utils/authutil"
  13. "time"
  14. )
  15. func (svc *Service) GetRoleList(query *pb.GetRoleListRequest) ([]*pb.Role, int64, error) {
  16. list, i, err := svc.Repository.GetRoleList(query)
  17. roles := make([]*pb.Role, 0)
  18. if err != nil {
  19. if errors.Is(err, gorm.ErrRecordNotFound) {
  20. return roles, 0, nil
  21. }
  22. return roles, 0, errorcode.New(svc.Namespace, err.Error(), 500)
  23. }
  24. for _, item := range list {
  25. roles = append(roles, svc.getRoleRes(item))
  26. }
  27. return roles, i, nil
  28. }
  29. func (svc *Service) GetAllRoles() ([]*pb.Base, error) {
  30. roles, err := svc.Repository.GetAllRoles()
  31. baseList := make([]*pb.Base, 0)
  32. if err != nil {
  33. if errors.Is(err, gorm.ErrRecordNotFound) {
  34. return baseList, nil
  35. }
  36. return baseList, errorcode.New(svc.Namespace, err.Error(), 500)
  37. }
  38. return svc.getRolesToBase(roles), nil
  39. }
  40. func (svc *Service) GetRole(query *pb.GetRoleRequest) (*pb.Role, error) {
  41. role, err := svc.Repository.GetRole(query.RoleId)
  42. if err != nil {
  43. return &pb.Role{}, errorcode.New(svc.Namespace, err.Error(), 500)
  44. }
  45. res := svc.getRoleRes(role)
  46. res.Permissions = svc.getBasePermissionRes(role.Permissions)
  47. res.Users = svc.getBaseUserRes(role.Users)
  48. return res, nil
  49. }
  50. func (svc *Service) CreateRole(ctx context.Context, add *pb.CreateRoleRequest) error {
  51. _, by, _, _ := utils.ParseMetadata(ctx)
  52. add.CreatedAt = by
  53. if err := svc.Repository.CreateRole(add); err != nil {
  54. return errorcode.New(svc.Namespace, err.Error(), 500)
  55. }
  56. roles, err := svc.Repository.AllRoles()
  57. if err == nil {
  58. items := svc.UpdateRulesItems(roles)
  59. authutil.JWTAuthService.SetRuleItems(items)
  60. }
  61. return nil
  62. }
  63. func (svc *Service) UpdateRole(ctx context.Context, query *pb.UpdateRoleRequest) error {
  64. if exists, err := svc.Repository.IsRoleExists(query.RoleId); err != nil {
  65. return errorcode.New(svc.Namespace, err.Error(), 500)
  66. } else {
  67. if !exists {
  68. return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  69. }
  70. }
  71. _, by, _, _ := utils.ParseMetadata(ctx)
  72. query.UpdatedBy = by
  73. if err := svc.Repository.UpdateRole(query); err != nil {
  74. return errorcode.New(svc.Namespace, err.Error(), 500)
  75. }
  76. return nil
  77. }
  78. func (svc *Service) ToggleRole(ctx context.Context, query *pb.ToggleRoleRequest) error {
  79. if exists, err := svc.Repository.IsRoleExists(query.RoleId); err != nil {
  80. return errorcode.New(svc.Namespace, err.Error(), 500)
  81. } else {
  82. if !exists {
  83. return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  84. }
  85. }
  86. _, by, _, _ := utils.ParseMetadata(ctx)
  87. query.UpdatedBy = by
  88. if err := svc.Repository.ToggleRole(query); err != nil {
  89. return errorcode.New(svc.Namespace, err.Error(), 500)
  90. }
  91. return nil
  92. }
  93. func (svc *Service) DeleteRole(query *pb.DeleteRoleRequest) error {
  94. if exists, err := svc.Repository.IsRoleExists(query.RoleId); err != nil {
  95. return errorcode.New(svc.Namespace, err.Error(), 500)
  96. } else {
  97. if !exists {
  98. return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
  99. }
  100. }
  101. if err := svc.Repository.DeleteRole(query.RoleId); err != nil {
  102. return errorcode.New(svc.Namespace, err.Error(), 500)
  103. }
  104. return nil
  105. }
  106. func (svc *Service) getBasePermissionRes(permissions []req.Permission) []*pb.Base {
  107. bases := make([]*pb.Base, 0)
  108. for _, item := range permissions {
  109. bases = append(bases, &pb.Base{
  110. Key: item.Name,
  111. Value: fmt.Sprintf("%d", item.ID),
  112. })
  113. }
  114. return bases
  115. }
  116. func (svc *Service) getBaseUserRes(users []req.User) []*pb.Base {
  117. bases := make([]*pb.Base, 0)
  118. for _, item := range users {
  119. bases = append(bases, &pb.Base{
  120. Key: item.Username,
  121. Value: fmt.Sprintf("%d", item.ID),
  122. })
  123. }
  124. return bases
  125. }
  126. func (svc *Service) getRoleRes(role *req.Role) *pb.Role {
  127. var updatedAt int64
  128. if role.UpdatedAt != nil {
  129. if role.CreatedAt.Truncate(time.Second) == role.UpdatedAt.Truncate(time.Second) {
  130. role.UpdatedAt = nil
  131. } else {
  132. updatedAt = utils.ConvertTimeToInt64(*role.UpdatedAt)
  133. }
  134. }
  135. return &pb.Role{
  136. Id: role.ID,
  137. Name: role.Name,
  138. Description: role.Description,
  139. CreatedBy: role.CreatedBy,
  140. CreatedAt: utils.ConvertTimeToInt64(role.CreatedAt),
  141. UpdatedAt: updatedAt,
  142. UpdatedBy: role.UpdatedBy,
  143. Status: role.Status,
  144. IsReserved: role.IsReserved,
  145. }
  146. }