From 0620df79d3f91d6da023e41de5765ee35dc891f8 Mon Sep 17 00:00:00 2001 From: Seven <1530011482@qq.com> Date: Mon, 21 Sep 2026 10:59:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/user.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 5 deletions(-) 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);