package repository import ( "fmt" "github.com/pkg/errors" "gorm.io/gorm" req "sghgogs.com/sghblog/authorization-service/domain/model/request" pb "sghgogs.com/sghblog/authorization-service/proto" ) // func ConvertTimeToInt64(t time.Time) int64 { // return t.Unix() // } // func ConvertInt64ToTime(seconds int64) time.Time { // return time.Unix(seconds, 0) // } type IRepository interface { InitTable() error AdminLogin(string) (req.AdminUser, error) GetAdminUser(int64) (req.AdminUser, error) GetAdminUserFind(string) (req.AdminUser, error) ListAdminUsers(*pb.ListAdminUsersRequest) ([]req.AdminUser, int64, error) CreateAdminUser(*req.AdminUser, []int64, []int64) error DeleteAdminUser(int64) error UpdateAdminUser(*pb.UpdateAdminUserRequest) error ToggleAdminUser(*pb.ToggleAdminUserRequest) error RetrieveEnabledUsers() ([]req.AdminUser, error) GetAdminRole(int64) (req.AdminRole, error) CreateAdminRole(*req.AdminRole, []int64, []int64) error UpdateAdminRole(*pb.UpdateAdminRoleRequest) error ListAdminRoles(*pb.ListAdminRolesRequest) ([]req.AdminRole, int64, error) RetrieveEnabledRoles() ([]req.AdminRole, error) // 获取启用的所有角色 ToggleAdminRole(*pb.ToggleAdminRoleRequest) error DeleteAdminRole(int64) error AdminProfile(int64) (req.AdminUser, error) IsAdminUserExists(interface{}) (bool, error) IsAdminRoleExists(interface{}) (bool, error) CreateAuditLog(*req.AuditLog) error } func NewRepository(db *gorm.DB) IRepository { return &Repository{ db: db, } } type Repository struct { db *gorm.DB } func (u *Repository) InitTable() error { return u.db.AutoMigrate( &req.AuditLog{}, &req.AdminUser{}, &req.AdminRole{}, &req.AdminPermission{}, &req.AdminUserProfile{}, &req.AdminUserProfileEducation{}, &req.AdminUserProfileSocialLink{}, &req.AdminUserProfileWorkHistory{}, ) } func (u *Repository) CreateAuditLog(log *req.AuditLog) error { return u.db.Create(&log).Error } // 检测权限ID如果不存在会抛出错误 func (u *Repository) getAdminPermissionValidIDs(ids []int64) ([]int64, error) { var validIDs []int64 result := u.db.Model(&req.AdminPermission{}).Where("id IN ?", ids).Pluck("id", &validIDs) if result.Error != nil { return nil, result.Error } // 检查是否有未找到的 ID if result.RowsAffected != int64(len(ids)) { // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID missingIDs := findMissingIDs(ids, validIDs) errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs) return nil, errors.New(errMsg) } return validIDs, nil } // 检测用户ID如果不存在会抛出错误 func (u *Repository) getAdminUserValidIDs(ids []int64) ([]int64, error) { var validIDs []int64 result := u.db.Model(&req.AdminUser{}).Where("id IN ?", ids).Pluck("id", &validIDs) if result.Error != nil { return nil, result.Error } // 检查是否有未找到的 ID if result.RowsAffected != int64(len(ids)) { // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID missingIDs := findMissingIDs(ids, validIDs) errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs) return nil, errors.New(errMsg) } return validIDs, nil } // 检测角色ID如果不存在会抛出错误 func (u *Repository) getAdminRoleValidIDs(ids []int64) ([]int64, error) { var validIDs []int64 result := u.db.Model(&req.AdminRole{}).Where("id IN ?", ids).Pluck("id", &validIDs) if result.Error != nil { return nil, result.Error } // 检查是否有未找到的 ID if result.RowsAffected != int64(len(ids)) { // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID missingIDs := findMissingIDs(ids, validIDs) errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs) return nil, errors.New(errMsg) } return validIDs, nil } // 检测团队ID如果不存在会抛出错误 func (u *Repository) getAdminTeamValidIDs(ids []int64) ([]int64, error) { var validIDs []int64 result := u.db.Model(&req.AdminTeam{}).Where("id IN ?", ids).Pluck("id", &validIDs) if result.Error != nil { return nil, result.Error } // 检查是否有未找到的 ID if result.RowsAffected != int64(len(ids)) { // 找到的 ID 数量和传入的数量不一致,说明有不存在的 ID missingIDs := findMissingIDs(ids, validIDs) errMsg := fmt.Sprintf("Some IDs do not exist: %v", missingIDs) return nil, errors.New(errMsg) } return validIDs, nil } func findMissingIDs(allIDs, foundIDs []int64) []int64 { var missingIDs []int64 foundSet := make(map[int64]bool) for _, id := range foundIDs { foundSet[id] = true } for _, id := range allIDs { if !foundSet[id] { missingIDs = append(missingIDs, id) } } return missingIDs }