repository.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package repository
  2. import (
  3. "fmt"
  4. "github.com/pkg/errors"
  5. "gorm.io/gorm"
  6. req "sghgogs.com/sghblog/authorization-service/domain/model/request"
  7. pb "sghgogs.com/sghblog/authorization-service/proto"
  8. )
  9. // func ConvertTimeToInt64(t time.Time) int64 {
  10. // return t.Unix()
  11. // }
  12. // func ConvertInt64ToTime(seconds int64) time.Time {
  13. // return time.Unix(seconds, 0)
  14. // }
  15. type IRepository interface {
  16. InitTable() error
  17. AdminLogin(string) (req.AdminUser, error)
  18. GetAdminUser(int64) (req.AdminUser, error)
  19. GetAdminUserFind(string) (req.AdminUser, error)
  20. ListAdminUsers(*pb.ListAdminUsersRequest) ([]req.AdminUser, int64, error)
  21. CreateAdminUser(*req.AdminUser, []int64, []int64) error
  22. DeleteAdminUser(int64) error
  23. UpdateAdminUser(*pb.UpdateAdminUserRequest) error
  24. ToggleAdminUser(*pb.ToggleAdminUserRequest) error
  25. RetrieveEnabledUsers() ([]req.AdminUser, error)
  26. GetAdminRole(int64) (req.AdminRole, error)
  27. CreateAdminRole(*req.AdminRole, []int64, []int64) error
  28. UpdateAdminRole(*pb.UpdateAdminRoleRequest) error
  29. ListAdminRoles(*pb.ListAdminRolesRequest) ([]req.AdminRole, int64, error)
  30. RetrieveEnabledRoles() ([]req.AdminRole, error) // 获取启用的所有角色
  31. ToggleAdminRole(*pb.ToggleAdminRoleRequest) error
  32. DeleteAdminRole(int64) error
  33. AdminProfile(int64) (req.AdminUser, error)
  34. IsAdminUserExists(interface{}) (bool, error)
  35. IsAdminRoleExists(interface{}) (bool, error)
  36. CreateAuditLog(*req.AuditLog) error
  37. GetAdminPermissionList(request *pb.GetAdminPermissionListRequest) ([]req.AdminPermission, int64, error)
  38. GetAdminPermission(*pb.GetAdminPermissionRequest) (req.AdminPermission, error)
  39. GetAdminPermissionAll() ([]req.AdminPermission, error)
  40. CreateAdminPermission(req.AdminPermission, []int64) error
  41. UpdateAdminPermission(int64, map[string]interface{}, []int64) error
  42. DeleteAdminPermission(int64) error
  43. ToggleAdminPermission(*pb.ToggleAdminPermissionRequest) error
  44. IsAdminPermissionExists(interface{}) (bool, error)
  45. }
  46. func NewRepository(db *gorm.DB) IRepository {
  47. return &Repository{
  48. db: db,
  49. }
  50. }
  51. type Repository struct {
  52. db *gorm.DB
  53. }
  54. func (u *Repository) InitTable() error {
  55. return u.db.AutoMigrate(
  56. &req.AuditLog{},
  57. &req.AdminUser{},
  58. &req.AdminRole{},
  59. &req.AdminPermission{},
  60. &req.AdminUserProfile{},
  61. &req.AdminUserProfileEducation{},
  62. &req.AdminUserProfileSocialLink{},
  63. &req.AdminUserProfileWorkHistory{},
  64. )
  65. }
  66. func (u *Repository) CreateAuditLog(log *req.AuditLog) error {
  67. return u.db.Create(&log).Error
  68. }
  69. // 检测权限ID如果不存在会抛出错误
  70. func (u *Repository) getAdminPermissionValidIDs(ids []int64) ([]int64, error) {
  71. var validIDs []int64
  72. result := u.db.Model(&req.AdminPermission{}).Where("id IN ?", ids).Pluck("id", &validIDs)
  73. if result.Error != nil {
  74. return nil, result.Error
  75. }
  76. // 检查是否有未找到的 ID
  77. if result.RowsAffected != int64(len(ids)) {
  78. // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID
  79. missingIDs := findMissingIDs(ids, validIDs)
  80. errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs)
  81. return nil, errors.New(errMsg)
  82. }
  83. return validIDs, nil
  84. }
  85. // 检测用户ID如果不存在会抛出错误
  86. func (u *Repository) getAdminUserValidIDs(ids []int64) ([]int64, error) {
  87. var validIDs []int64
  88. result := u.db.Model(&req.AdminUser{}).Where("id IN ?", ids).Pluck("id", &validIDs)
  89. if result.Error != nil {
  90. return nil, result.Error
  91. }
  92. // 检查是否有未找到的 ID
  93. if result.RowsAffected != int64(len(ids)) {
  94. // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID
  95. missingIDs := findMissingIDs(ids, validIDs)
  96. errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs)
  97. return nil, errors.New(errMsg)
  98. }
  99. return validIDs, nil
  100. }
  101. // 检测角色ID如果不存在会抛出错误
  102. func (u *Repository) getAdminRoleValidIDs(ids []int64) ([]int64, error) {
  103. var validIDs []int64
  104. result := u.db.Model(&req.AdminRole{}).Where("id IN ?", ids).Pluck("id", &validIDs)
  105. if result.Error != nil {
  106. return nil, result.Error
  107. }
  108. // 检查是否有未找到的 ID
  109. if result.RowsAffected != int64(len(ids)) {
  110. // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID
  111. missingIDs := findMissingIDs(ids, validIDs)
  112. errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs)
  113. return nil, errors.New(errMsg)
  114. }
  115. return validIDs, nil
  116. }
  117. // 检测团队ID如果不存在会抛出错误
  118. func (u *Repository) getAdminTeamValidIDs(ids []int64) ([]int64, error) {
  119. var validIDs []int64
  120. result := u.db.Model(&req.AdminTeam{}).Where("id IN ?", ids).Pluck("id", &validIDs)
  121. if result.Error != nil {
  122. return nil, result.Error
  123. }
  124. // 检查是否有未找到的 ID
  125. if result.RowsAffected != int64(len(ids)) {
  126. // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID
  127. missingIDs := findMissingIDs(ids, validIDs)
  128. errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs)
  129. return nil, errors.New(errMsg)
  130. }
  131. return validIDs, nil
  132. }
  133. func findMissingIDs(allIDs, foundIDs []int64) []int64 {
  134. var missingIDs []int64
  135. foundSet := make(map[int64]bool)
  136. for _, id := range foundIDs {
  137. foundSet[id] = true
  138. }
  139. for _, id := range allIDs {
  140. if !foundSet[id] {
  141. missingIDs = append(missingIDs, id)
  142. }
  143. }
  144. return missingIDs
  145. }