const express = require('express'); const router = express.Router(); const { getDb } = require('../db'); // 获取所有分类 router.get('/', (req, res) => { const db = getDb(); const { type } = req.query; let sql = 'SELECT * FROM categories'; const params = []; if (type) { sql += ' WHERE type = ?'; params.push(type); } sql += ' ORDER BY sort_order ASC'; const categories = db.all(sql, ...params); res.json(categories); }); // 新增分类 router.post('/', (req, res) => { const db = getDb(); const { name, type = 'expense', icon, sort_order = 0 } = req.body; if (!name) { return res.status(400).json({ error: '分类名称不能为空' }); } try { const result = db.run( 'INSERT INTO categories (name, type, icon, sort_order) VALUES (?, ?, ?, ?)', name, type, icon, sort_order ); const category = db.get('SELECT * FROM categories WHERE id = ?', result.lastInsertRowid); res.status(201).json(category); } catch (err) { if (err.message.includes('UNIQUE')) { return res.status(400).json({ error: '分类名称已存在' }); } throw err; } }); // 修改分类 router.put('/:id', (req, res) => { const db = getDb(); const { id } = req.params; const { name, type, icon, sort_order } = req.body; const existing = db.get('SELECT * FROM categories WHERE id = ?', parseInt(id)); if (!existing) { return res.status(404).json({ error: '分类不存在' }); } db.run( 'UPDATE categories SET name = ?, type = ?, icon = ?, sort_order = ? WHERE id = ?', name || existing.name, type || existing.type, icon !== undefined ? icon : existing.icon, sort_order !== undefined ? sort_order : existing.sort_order, parseInt(id) ); const updated = db.get('SELECT * FROM categories WHERE id = ?', parseInt(id)); res.json(updated); }); // 删除分类 router.delete('/:id', (req, res) => { const db = getDb(); const { id } = req.params; const recordCount = db.get( 'SELECT COUNT(*) as count FROM records WHERE category_id = ?', parseInt(id) ); if (recordCount.count > 0) { return res.status(400).json({ error: '该分类下存在记录,无法删除' }); } const result = db.run('DELETE FROM categories WHERE id = ?', parseInt(id)); if (result.changes === 0) { return res.status(404).json({ error: '分类不存在' }); } res.json({ message: '删除成功' }); }); module.exports = router;