package services import ( "errors" "go.uber.org/zap" "goalfymax-admin/internal/models" "goalfymax-admin/internal/storage" "goalfymax-admin/pkg/utils" ) // RoleService 角色服务接口 type RoleService interface { Create(req *models.RoleCreateRequest) (*models.Role, error) GetByID(id uint) (*models.Role, error) Update(id uint, req *models.RoleUpdateRequest) (*models.Role, error) Delete(id uint) error List(req *models.RoleListRequest) ([]models.Role, int64, error) UpdateStatus(id uint, status int) error } type roleService struct { roleStorage storage.RoleStorage logger *utils.Logger } // NewRoleService 创建角色服务实例 func NewRoleService(roleStorage storage.RoleStorage, logger *utils.Logger) RoleService { return &roleService{ roleStorage: roleStorage, logger: logger, } } // Create 创建角色 func (s *roleService) Create(req *models.RoleCreateRequest) (*models.Role, error) { // 检查角色名称是否已存在 _, err := s.roleStorage.GetByName(req.Name) if err == nil { return nil, errors.New("角色名称已存在") } // 创建角色 role := &models.Role{ Name: req.Name, Level: req.Level, Description: req.Description, IsDefault: req.IsDefault, } err = s.roleStorage.Create(role) if err != nil { s.logger.Error("创建角色失败", zap.Error(err)) return nil, errors.New("创建角色失败") } s.logger.Info("角色创建成功", zap.String("name", role.Name)) return role, nil } // GetByID 根据ID获取角色 func (s *roleService) GetByID(id uint) (*models.Role, error) { return s.roleStorage.GetByID(id) } // Update 更新角色 func (s *roleService) Update(id uint, req *models.RoleUpdateRequest) (*models.Role, error) { // 获取角色信息 role, err := s.roleStorage.GetByID(id) if err != nil { return nil, errors.New("角色不存在") } // 检查角色名称是否已被其他角色使用 if req.Name != role.Name { existingRole, err := s.roleStorage.GetByName(req.Name) if err == nil && existingRole.ID != id { return nil, errors.New("角色名称已被其他角色使用") } role.Name = req.Name } // 更新角色信息 role.Name = req.Name role.Level = req.Level role.Description = req.Description role.IsDefault = req.IsDefault err = s.roleStorage.Update(role) if err != nil { s.logger.Error("更新角色失败", zap.Error(err)) return nil, errors.New("更新角色失败") } s.logger.Info("角色更新成功", zap.Uint("role_id", id)) return role, nil } // Delete 删除角色 func (s *roleService) Delete(id uint) error { // 检查角色是否存在 _, err := s.roleStorage.GetByID(id) if err != nil { return errors.New("角色不存在") } err = s.roleStorage.Delete(id) if err != nil { s.logger.Error("删除角色失败", zap.Error(err)) return errors.New("删除角色失败") } s.logger.Info("角色删除成功", zap.Uint("role_id", id)) return nil } // List 获取角色列表 func (s *roleService) List(req *models.RoleListRequest) ([]models.Role, int64, error) { return s.roleStorage.List(req) } // UpdateStatus 更新角色状态 func (s *roleService) UpdateStatus(id uint, status int) error { // 检查角色是否存在 _, err := s.roleStorage.GetByID(id) if err != nil { return errors.New("角色不存在") } err = s.roleStorage.UpdateStatus(id, status) if err != nil { s.logger.Error("更新角色状态失败", zap.Error(err)) return errors.New("更新角色状态失败") } s.logger.Info("角色状态更新成功", zap.Uint("role_id", id), zap.Int("status", status)) return nil }