package services import ( "errors" "go.uber.org/zap" "goalfymax-admin/internal/models" "goalfymax-admin/internal/storage" "goalfymax-admin/pkg/utils" ) // PageService 页面服务接口 type PageService interface { Create(req *models.PageCreateRequest) (*models.Page, error) GetByID(id uint) (*models.Page, error) Update(id uint, req *models.PageUpdateRequest) (*models.Page, error) Delete(id uint) error List(req *models.PageListRequest) ([]models.Page, int64, error) } type pageService struct { pageStorage storage.PageStorage logger *utils.Logger } // NewPageService 创建页面服务实例 func NewPageService(pageStorage storage.PageStorage, logger *utils.Logger) PageService { return &pageService{ pageStorage: pageStorage, logger: logger, } } // Create 创建页面 func (s *pageService) Create(req *models.PageCreateRequest) (*models.Page, error) { // 检查页面路径是否已存在 _, err := s.pageStorage.GetByPath(req.Path) if err == nil { return nil, errors.New("页面路径已存在") } // 创建页面 page := &models.Page{ Name: req.Name, Path: req.Path, Icon: req.Icon, SortOrder: req.SortOrder, IsActive: req.IsActive, } err = s.pageStorage.Create(page) if err != nil { s.logger.Error("创建页面失败", zap.Error(err)) return nil, errors.New("创建页面失败") } s.logger.Info("页面创建成功", zap.String("name", page.Name)) return page, nil } // GetByID 根据ID获取页面 func (s *pageService) GetByID(id uint) (*models.Page, error) { page, err := s.pageStorage.GetByID(id) if err != nil { s.logger.Error("获取页面失败", zap.Uint("id", id), zap.Error(err)) return nil, errors.New("页面不存在") } return page, nil } // Update 更新页面 func (s *pageService) Update(id uint, req *models.PageUpdateRequest) (*models.Page, error) { // 获取现有页面 page, err := s.pageStorage.GetByID(id) if err != nil { s.logger.Error("页面不存在", zap.Uint("id", id), zap.Error(err)) return nil, errors.New("页面不存在") } // 如果路径发生变化,检查新路径是否已存在 if req.Path != page.Path { _, err := s.pageStorage.GetByPath(req.Path) if err == nil { return nil, errors.New("页面路径已被其他页面使用") } page.Path = req.Path } // 更新页面信息 page.Name = req.Name page.Icon = req.Icon page.SortOrder = req.SortOrder page.IsActive = req.IsActive err = s.pageStorage.Update(page) if err != nil { s.logger.Error("更新页面失败", zap.Error(err)) return nil, errors.New("更新页面失败") } s.logger.Info("页面更新成功", zap.Uint("page_id", id)) return page, nil } // Delete 删除页面 func (s *pageService) Delete(id uint) error { // 检查页面是否存在 _, err := s.pageStorage.GetByID(id) if err != nil { s.logger.Error("页面不存在", zap.Uint("id", id), zap.Error(err)) return errors.New("页面不存在") } err = s.pageStorage.Delete(id) if err != nil { s.logger.Error("删除页面失败", zap.Error(err)) return errors.New("删除页面失败") } s.logger.Info("页面删除成功", zap.Uint("page_id", id)) return nil } // List 获取页面列表 func (s *pageService) List(req *models.PageListRequest) ([]models.Page, int64, error) { pages, total, err := s.pageStorage.List(req) if err != nil { s.logger.Error("获取页面列表失败", zap.Error(err)) return nil, 0, errors.New("获取页面列表失败") } return pages, total, nil }