const express = require('express'); const db = require('../db-sqlite'); const { authenticate } = require('../middleware/auth'); module.exports = function(app) { const router = express.Router(); router.get('/', authenticate, async (req, res) => { try { const categoriesResult = await db.query('SELECT id, name, parent_id, created_at, updated_at FROM categories ORDER BY parent_id, name'); const categories = categoriesResult.rows; res.json({ success: true, data: categories, count: categories.length }); } catch (error) { console.error('获取分类列表失败:', error); res.status(500).json({ success: false, message: '获取分类列表失败' }); } }); router.get('/tree', authenticate, async (req, res) => { try { const categoriesResult = await db.query('SELECT id, name, parent_id, created_at, updated_at FROM categories ORDER BY parent_id, name'); const categories = categoriesResult.rows; const categoryTree = buildCategoryTree(categories); res.json({ success: true, data: categoryTree }); } catch (error) { console.error('获取分类树失败:', error); res.status(500).json({ success: false, message: '获取分类树失败' }); } }); router.get('/:id', authenticate, async (req, res) => { try { const { id } = req.params; const categoryResult = await db.query('SELECT id, name, parent_id, created_at, updated_at FROM categories WHERE id = ?', [id]); if (categoryResult.rows.length === 0) { return res.status(404).json({ success: false, message: '分类不存在' }); } const category = categoryResult.rows[0]; res.json({ success: true, data: category }); } catch (error) { console.error('获取分类详情失败:', error); res.status(500).json({ success: false, message: '获取分类详情失败' }); } }); router.post('/', authenticate, async (req, res) => { try { const { name, parent_id } = req.body; if (!name) { return res.status(400).json({ success: false, message: '分类名称为必填项' }); } const result = await db.query( 'INSERT INTO categories (name, parent_id, created_at, updated_at) VALUES (?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)', [name, parent_id || null] ); const newCategoryResult = await db.query('SELECT id, name, parent_id, created_at, updated_at FROM categories WHERE id = ?', [result.lastID]); const newCategory = newCategoryResult.rows[0]; console.log(`分类 ${name} 创建成功,由 ${req.user.username} 操作`); res.json({ success: true, data: newCategory }); } catch (error) { console.error('创建分类失败:', error); res.status(500).json({ success: false, message: '创建分类失败' }); } }); router.put('/:id', authenticate, async (req, res) => { try { const { id } = req.params; const { name, parent_id } = req.body; await db.query( 'UPDATE categories SET name = ?, parent_id = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', [name, parent_id, id] ); const updatedCategoryResult = await db.query('SELECT id, name, parent_id, created_at, updated_at FROM categories WHERE id = ?', [id]); const updatedCategory = updatedCategoryResult.rows[0]; res.json({ success: true, data: updatedCategory }); } catch (error) { console.error('更新分类信息失败:', error); res.status(500).json({ success: false, message: '更新分类信息失败' }); } }); router.delete('/:id', authenticate, async (req, res) => { try { const { id } = req.params; const existingCategory = await db.query('SELECT id FROM categories WHERE id = ?', [id]); if (existingCategory.rows.length === 0) { return res.status(404).json({ success: false, message: '分类不存在' }); } await db.query('DELETE FROM categories WHERE id = ?', [id]); res.json({ success: true, message: '分类删除成功' }); } catch (error) { console.error('删除分类失败:', error); res.status(500).json({ success: false, message: '删除分类失败' }); } }); function buildCategoryTree(categories, parentId = null) { const tree = []; categories.forEach(category => { if (category.parent_id === parentId) { tree.push({ id: category.id, name: category.name, children: [] }); } }); const rootCategories = categories.filter(cat => !cat.parent_id); rootCategories.forEach(category => { tree.push({ id: category.id, name: category.name, children: buildCategoryTree(categories, category.id) }); }); return tree; } app.use('/api/categories', router); };