132 lines
3.4 KiB
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
|
|
}
|