优化接口,实现分页查询

This commit is contained in:
2026-09-21 10:59:35 +08:00
parent 52ccf88940
commit 0620df79d3
+75 -5
View File
@@ -65,12 +65,82 @@ router.get(
} }
); );
// 获取所有聊天消息 // 获取最近联系人的最后一条聊天消息
router.get( router.get(
"/messagesInfo", "/recentChats",
authMiddleware, authMiddleware,
(req, res) => { (req, res) => {
const currentUserName = req.user.username; const currentUserName = req.user.username;
const sql = `
SELECT
contact_name,
content,
created_at
FROM (
SELECT
CASE
WHEN sender_name = ? THEN receiver_name
ELSE sender_name
END AS contact_name,
content,
created_at,
ROW_NUMBER() OVER (
PARTITION BY
CASE
WHEN sender_name = ? THEN receiver_name
ELSE sender_name
END
ORDER BY created_at DESC
) AS rn
FROM chat_mysql.messages
WHERE sender_name = ?
OR receiver_name = ?
) t
WHERE rn = 1
ORDER BY created_at DESC;
`;
db.query(sql, [currentUserName, currentUserName, currentUserName, currentUserName], (error, results) => {
if (error) {
console.error("数据库查询失败:", error);
return res.status(500).json({
code: 500,
message: "查询失败",
});
}
if (results.length > 0) {
res.json({
code: 200,
message: "查询成功",
data: {
recentChats: results.map(message => ({
contactName: message.contact_name,
content: message.content,
createdAt: message.created_at
}))
},
});
} else {
res.json({
code: 401,
message: "未找到联系人消息",
data: {
recentChats: []
}
});
}
});
}
);
// 获取某个联系人的最近n条聊天消息,分页获取
router.post(
"/contactMessagesInfo",
authMiddleware,
(req, res) => {
const currentUserName = req.user.username;
const { contactName, limit } = req.body;
const sql = ` const sql = `
SELECT SELECT
id, id,
@@ -79,10 +149,10 @@ router.get(
content, content,
created_at created_at
FROM chat_mysql.messages FROM chat_mysql.messages
WHERE sender_name = ? OR receiver_name = ? WHERE (sender_name = ? OR receiver_name = ?) AND (sender_name = ? OR receiver_name = ?)
ORDER BY created_at ASC; ORDER BY created_at ASC LIMIT ? ;
`; `;
db.query(sql, [currentUserName, currentUserName], (error, results) => { db.query(sql, [currentUserName, currentUserName, contactName, contactName, limit], (error, results) => {
if (error) { if (error) {
console.error("数据库查询失败:", error); console.error("数据库查询失败:", error);