91 lines
2.4 KiB
JavaScript
Executable File
91 lines
2.4 KiB
JavaScript
Executable File
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;
|