151 lines
3.6 KiB
Go
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
|
|
}
|
|
|