repository.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. }
  38. func NewRepository(db *gorm.DB) IRepository {
  39. return &Repository{
  40. db: db,
  41. }
  42. }
  43. type Repository struct {
  44. db *gorm.DB
  45. }
  46. func (u *Repository) InitTable() error {
  47. return u.db.AutoMigrate(
  48. &req.AuditLog{},
  49. &req.AdminUser{},
  50. &req.AdminRole{},
  51. &req.AdminPermission{},
  52. &req.AdminUserProfile{},
  53. &req.AdminUserProfileEducation{},
  54. &req.AdminUserProfileSocialLink{},
  55. &req.AdminUserProfileWorkHistory{},
  56. )
  57. }
  58. func (u *Repository) CreateAuditLog(log *req.AuditLog) error {
  59. return u.db.Create(&log).Error
  60. }
  61. // 检测权限ID如果不存在会抛出错误
  62. func (u *Repository) getAdminPermissionValidIDs(ids []int64) ([]int64, error) {
  63. var validIDs []int64
  64. result := u.db.Model(&req.AdminPermission{}).Where("id IN ?", ids).Pluck("id", &validIDs)
  65. if result.Error != nil {
  66. return nil, result.Error
  67. }
  68. // 检查是否有未找到的 ID
  69. if result.RowsAffected != int64(len(ids)) {
  70. // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID
  71. missingIDs := findMissingIDs(ids, validIDs)
  72. errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs)
  73. return nil, errors.New(errMsg)
  74. }
  75. return validIDs, nil
  76. }
  77. // 检测用户ID如果不存在会抛出错误
  78. func (u *Repository) getAdminUserValidIDs(ids []int64) ([]int64, error) {
  79. var validIDs []int64
  80. result := u.db.Model(&req.AdminUser{}).Where("id IN ?", ids).Pluck("id", &validIDs)
  81. if result.Error != nil {
  82. return nil, result.Error
  83. }
  84. // 检查是否有未找到的 ID
  85. if result.RowsAffected != int64(len(ids)) {
  86. // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID
  87. missingIDs := findMissingIDs(ids, validIDs)
  88. errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs)
  89. return nil, errors.New(errMsg)
  90. }
  91. return validIDs, nil
  92. }
  93. // 检测角色ID如果不存在会抛出错误
  94. func (u *Repository) getAdminRoleValidIDs(ids []int64) ([]int64, error) {
  95. var validIDs []int64
  96. result := u.db.Model(&req.AdminRole{}).Where("id IN ?", ids).Pluck("id", &validIDs)
  97. if result.Error != nil {
  98. return nil, result.Error
  99. }
  100. // 检查是否有未找到的 ID
  101. if result.RowsAffected != int64(len(ids)) {
  102. // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID
  103. missingIDs := findMissingIDs(ids, validIDs)
  104. errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs)
  105. return nil, errors.New(errMsg)
  106. }
  107. return validIDs, nil
  108. }
  109. // 检测团队ID如果不存在会抛出错误
  110. func (u *Repository) getAdminTeamValidIDs(ids []int64) ([]int64, error) {
  111. var validIDs []int64
  112. result := u.db.Model(&req.AdminTeam{}).Where("id IN ?", ids).Pluck("id", &validIDs)
  113. if result.Error != nil {
  114. return nil, result.Error
  115. }
  116. // 检查是否有未找到的 ID
  117. if result.RowsAffected != int64(len(ids)) {
  118. // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID
  119. missingIDs := findMissingIDs(ids, validIDs)
  120. errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs)
  121. return nil, errors.New(errMsg)
  122. }
  123. return validIDs, nil
  124. }
  125. func findMissingIDs(allIDs, foundIDs []int64) []int64 {
  126. var missingIDs []int64
  127. foundSet := make(map[int64]bool)
  128. for _, id := range foundIDs {
  129. foundSet[id] = true
  130. }
  131. for _, id := range allIDs {
  132. if !foundSet[id] {
  133. missingIDs = append(missingIDs, id)
  134. }
  135. }
  136. return missingIDs
  137. }