package service import ( "fmt" "dd_fiber_api/internal/camp" "dd_fiber_api/internal/camp/dao" "dd_fiber_api/pkg/snowflake" ) // CategoryService 分类服务 type CategoryService struct { categoryDAO *dao.CategoryDAO campDAO *dao.CampDAO } // NewCategoryService 创建分类服务 func NewCategoryService(categoryDAO *dao.CategoryDAO, campDAO *dao.CampDAO) *CategoryService { return &CategoryService{ categoryDAO: categoryDAO, campDAO: campDAO, } } // CreateCategory 创建分类 func (s *CategoryService) CreateCategory(req *camp.CreateCategoryRequest) (*camp.CreateCategoryResponse, error) { categoryID := snowflake.GetInstance().NextIDString() category := &camp.Category{ ID: categoryID, Name: req.Name, SortOrder: req.SortOrder, } err := s.categoryDAO.Create(category) if err != nil { return &camp.CreateCategoryResponse{ Success: false, Message: fmt.Sprintf("创建分类失败: %v", err), }, nil } return &camp.CreateCategoryResponse{ ID: categoryID, Success: true, Message: "创建分类成功", }, nil } // GetCategory 获取分类 func (s *CategoryService) GetCategory(id string) (*camp.GetCategoryResponse, error) { category, err := s.categoryDAO.GetByID(id) if err != nil { return &camp.GetCategoryResponse{ Success: false, Message: fmt.Sprintf("获取分类失败: %v", err), }, nil } return &camp.GetCategoryResponse{ Category: category, Success: true, Message: "获取分类成功", }, nil } // UpdateCategory 更新分类 func (s *CategoryService) UpdateCategory(req *camp.UpdateCategoryRequest) (*camp.UpdateCategoryResponse, error) { category := &camp.Category{ ID: req.ID, Name: req.Name, SortOrder: req.SortOrder, } err := s.categoryDAO.Update(category) if err != nil { return &camp.UpdateCategoryResponse{ Success: false, Message: fmt.Sprintf("更新分类失败: %v", err), }, nil } return &camp.UpdateCategoryResponse{ Success: true, Message: "更新分类成功", }, nil } // DeleteCategory 删除分类 func (s *CategoryService) DeleteCategory(id string) (*camp.DeleteCategoryResponse, error) { // 先检查该分类下是否有打卡营,有则不允许删除 if s.campDAO != nil { count, err := s.campDAO.CountByCategoryID(id) if err != nil { return &camp.DeleteCategoryResponse{ Success: false, Message: fmt.Sprintf("检查分类下打卡营失败: %v", err), }, nil } if count > 0 { return &camp.DeleteCategoryResponse{ Success: false, Message: "该分类下存在打卡营,无法删除;请先将打卡营移出该分类或删除后再试", }, nil } } err := s.categoryDAO.Delete(id) if err != nil { return &camp.DeleteCategoryResponse{ Success: false, Message: fmt.Sprintf("删除分类失败: %v", err), }, nil } return &camp.DeleteCategoryResponse{ Success: true, Message: "删除分类成功", }, nil } // ListCategories 列出分类(支持关键词搜索) func (s *CategoryService) ListCategories(req *camp.ListCategoriesRequest) (*camp.ListCategoriesResponse, error) { // 设置默认值 if req.Page < 1 { req.Page = 1 } if req.PageSize < 1 { req.PageSize = 10 } if req.PageSize > 100 { req.PageSize = 100 } categories, total, err := s.categoryDAO.List(req.Keyword, req.Page, req.PageSize) if err != nil { return &camp.ListCategoriesResponse{ Success: false, Message: fmt.Sprintf("获取分类列表失败: %v", err), }, nil } return &camp.ListCategoriesResponse{ Categories: categories, Total: total, Success: true, Message: "获取分类列表成功", }, nil }