Spaces:
Sleeping
Sleeping
| const asyncHandler = require('express-async-handler'); | |
| const Category = require('../models/Category'); | |
| const PromptGroup = require('../models/PromptGroup'); | |
| // @desc 获取所有分类 | |
| // @route GET /api/categories | |
| // @access Private | |
| const getCategories = asyncHandler(async (req, res) => { | |
| const categories = await Category.find({}).sort({ name: 1 }); | |
| res.json(categories); | |
| }); | |
| // @desc 通过ID获取分类 | |
| // @route GET /api/categories/:id | |
| // @access Private | |
| const getCategoryById = asyncHandler(async (req, res) => { | |
| const category = await Category.findById(req.params.id); | |
| if (category) { | |
| res.json(category); | |
| } else { | |
| res.status(404); | |
| throw new Error('分类未找到'); | |
| } | |
| }); | |
| // @desc 创建分类 | |
| // @route POST /api/categories | |
| // @access Private | |
| const createCategory = asyncHandler(async (req, res) => { | |
| const { name, color } = req.body; | |
| // 检查是否分类名称已存在 | |
| const categoryExists = await Category.findOne({ name }); | |
| if (categoryExists) { | |
| res.status(400); | |
| throw new Error('分类名称已存在'); | |
| } | |
| const category = await Category.create({ | |
| name, | |
| color: color || '#007AFF', | |
| }); | |
| if (category) { | |
| res.status(201).json(category); | |
| } else { | |
| res.status(400); | |
| throw new Error('无效的分类数据'); | |
| } | |
| }); | |
| // @desc 更新分类 | |
| // @route PUT /api/categories/:id | |
| // @access Private | |
| const updateCategory = asyncHandler(async (req, res) => { | |
| const { name, color } = req.body; | |
| const category = await Category.findById(req.params.id); | |
| if (category) { | |
| // 如果更改了名称,检查新名称是否已存在 | |
| if (name && name !== category.name) { | |
| const categoryExists = await Category.findOne({ name }); | |
| if (categoryExists) { | |
| res.status(400); | |
| throw new Error('分类名称已存在'); | |
| } | |
| } | |
| category.name = name || category.name; | |
| category.color = color || category.color; | |
| const updatedCategory = await category.save(); | |
| res.json(updatedCategory); | |
| } else { | |
| res.status(404); | |
| throw new Error('分类未找到'); | |
| } | |
| }); | |
| // @desc 删除分类 | |
| // @route DELETE /api/categories/:id | |
| // @access Private | |
| const deleteCategory = asyncHandler(async (req, res) => { | |
| const category = await Category.findById(req.params.id); | |
| if (!category) { | |
| res.status(404); | |
| throw new Error('分类未找到'); | |
| } | |
| // 检查是否有提示词组使用该分类 | |
| const groupsUsingCategory = await PromptGroup.countDocuments({ category: req.params.id }); | |
| if (groupsUsingCategory > 0) { | |
| res.status(400); | |
| throw new Error(`无法删除分类,有 ${groupsUsingCategory} 个提示词组正在使用它`); | |
| } | |
| await category.deleteOne(); | |
| res.json({ message: '分类已删除' }); | |
| }); | |
| module.exports = { | |
| getCategories, | |
| getCategoryById, | |
| createCategory, | |
| updateCategory, | |
| deleteCategory, | |
| }; |