JewelryMall/server/src/controllers/adminCategory.ts
2026-02-25 01:21:16 +08:00

56 lines
2.0 KiB
TypeScript

import { Request, Response } from 'express'
import pool from '../utils/db'
import { RowDataPacket, ResultSetHeader } from 'mysql2'
// GET /api/admin/categories
export async function adminGetCategories(_req: Request, res: Response): Promise<void> {
try {
const [rows] = await pool.execute<RowDataPacket[]>(
'SELECT id, name, icon, parent_id, sort FROM categories ORDER BY sort ASC, id ASC'
)
res.json({ code: 0, data: rows })
} catch (err) {
console.error('adminGetCategories error:', err)
res.status(500).json({ code: 500, message: '获取分类列表失败' })
}
}
// POST /api/admin/categories
export async function adminCreateCategory(req: Request, res: Response): Promise<void> {
try {
const { name, parentId, sort, icon } = req.body
if (!name || !name.trim()) {
res.status(400).json({ code: 400, message: '分类名称不能为空' })
return
}
const [result] = await pool.execute<ResultSetHeader>(
'INSERT INTO categories (name, icon, parent_id, sort) VALUES (?, ?, ?, ?)',
[name.trim(), icon || null, parentId || null, sort ?? 0]
)
res.json({ code: 0, data: { id: result.insertId } })
} catch (err) {
console.error('adminCreateCategory error:', err)
res.status(500).json({ code: 500, message: '创建分类失败' })
}
}
// DELETE /api/admin/categories/:id
export async function adminDeleteCategory(req: Request, res: Response): Promise<void> {
try {
const { id } = req.params
// Check if any products use this category
const [products] = await pool.execute<RowDataPacket[]>(
'SELECT COUNT(*) as count FROM products WHERE category_id = ?', [id]
)
if (products[0].count > 0) {
res.status(400).json({ code: 400, message: '该分类下有商品,无法删除' })
return
}
await pool.execute('DELETE FROM categories WHERE id = ?', [id])
res.json({ code: 0, message: '删除成功' })
} catch (err) {
console.error('adminDeleteCategory error:', err)
res.status(500).json({ code: 500, message: '删除分类失败' })
}
}