diff --git a/routes/user.js b/routes/user.js index c054223..35f0214 100644 --- a/routes/user.js +++ b/routes/user.js @@ -65,12 +65,82 @@ router.get( } ); -// 获取所有聊天消息 +// 获取最近联系人的最后一条聊天消息 router.get( - "/messagesInfo", + "/recentChats", authMiddleware, (req, res) => { 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 = ` SELECT id, @@ -79,10 +149,10 @@ router.get( content, created_at FROM chat_mysql.messages - WHERE sender_name = ? OR receiver_name = ? - ORDER BY created_at ASC; + WHERE (sender_name = ? OR receiver_name = ?) AND (sender_name = ? OR receiver_name = ?) + 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) { console.error("数据库查询失败:", error);