duidui_fiber/internal/camp/service/category_service.go
2026-03-27 10:34:03 +08:00

151 lines
3.6 KiB
Go

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
}