Files
goalfylearning-admin/internal/services/page_service.go

132 lines
3.4 KiB
Go

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
}