gangbi_web/backend/routes/messages.js
2025-02-07 13:10:01 +08:00

65 lines
1.8 KiB
JavaScript

const express = require('express');
const router = express.Router();
const db = require('../utils/db');
const auth = require('../middleware/auth');
const checkPermission = require('../middleware/checkPermission');
const { broadcastNewMessage } = require('../websocket');
// 提交留言
router.post('/', async (req, res) => {
try {
const { name, email, message } = req.body;
const [result] = await db.query(
'INSERT INTO messages (name, email, content) VALUES (?, ?, ?)',
[name, email, message]
);
// 获取新插入的消息详情
const [newMessage] = await db.query(
'SELECT * FROM messages WHERE id = ?',
[result.insertId]
);
// 广播新消息通知
broadcastNewMessage(newMessage[0]);
res.status(201).json({ message: '留言提交成功' });
} catch (error) {
res.status(500).json({ message: error.message });
}
});
// 获取留言列表(需要管理员权限)
router.get('/', auth, checkPermission('message:manage'), async (req, res) => {
try {
const [messages] = await db.query(`
SELECT m.*, a.username as reader_name
FROM messages m
LEFT JOIN admins a ON m.read_by = a.id
ORDER BY m.created_at DESC
`);
res.json(messages);
} catch (error) {
res.status(500).json({ message: error.message });
}
});
// 标记留言为已读
router.put('/:id/read', auth, checkPermission('message:manage'), async (req, res) => {
try {
await db.query(
`UPDATE messages
SET status = 'read',
read_by = ?,
read_at = CURRENT_TIMESTAMP
WHERE id = ?`,
[req.admin.id, req.params.id]
);
res.json({ message: '标记成功' });
} catch (error) {
res.status(500).json({ message: error.message });
}
});
module.exports = router;