const express = require('express'); const router = express.Router(); const friendsStore = require('../store/friendsStore'); /** * 简单的认证中间件 * 从 Authori-zation 头获取用户ID(实际项目应验证 JWT) */ function authMiddleware(req, res, next) { const token = req.headers['authori-zation'] || req.headers['authorization']; if (!token) { return res.status(401).json({ code: 401, message: '请先登录' }); } // 简单模拟:从 token 中提取用户ID // 实际项目应该验证 JWT 并解析用户信息 // 这里假设 token 格式为 "Bearer userId" 或直接是 userId let userId; if (token.startsWith('Bearer ')) { userId = parseInt(token.substring(7), 10); } else { userId = parseInt(token, 10); } if (isNaN(userId)) { // 如果无法解析,默认使用用户ID 1 userId = 1; } req.userId = userId; next(); } /** * GET /api/front/users/search - 搜索用户 */ router.get('/users/search', authMiddleware, (req, res) => { try { const { keyword, page = 1, pageSize = 20 } = req.query; if (!keyword || keyword.trim() === '') { return res.json({ code: 200, message: 'success', data: { list: [], total: 0, page: 1, pageSize: 20 } }); } const result = friendsStore.searchUsers( keyword.trim(), req.userId, parseInt(page, 10), parseInt(pageSize, 10) ); res.json({ code: 200, message: 'success', data: result }); } catch (error) { console.error('搜索用户失败:', error); res.status(500).json({ code: 500, message: '搜索失败' }); } }); /** * GET /api/front/friends - 获取好友列表 */ router.get('/friends', authMiddleware, (req, res) => { try { const { page = 1, pageSize = 100 } = req.query; const result = friendsStore.getFriendList( req.userId, parseInt(page, 10), parseInt(pageSize, 10) ); res.json({ code: 200, message: 'success', data: result }); } catch (error) { console.error('获取好友列表失败:', error); res.status(500).json({ code: 500, message: '获取好友列表失败' }); } }); /** * POST /api/front/friends/request - 发送好友请求 */ router.post('/friends/request', authMiddleware, (req, res) => { try { const { targetUserId, message = '' } = req.body; if (!targetUserId) { return res.status(400).json({ code: 400, message: '请指定目标用户' }); } if (targetUserId === req.userId) { return res.status(400).json({ code: 400, message: '不能添加自己为好友' }); } const result = friendsStore.sendFriendRequest( req.userId, parseInt(targetUserId, 10), message ); if (result.success) { res.json({ code: 200, message: '好友请求已发送', data: { requestId: result.requestId } }); } else { res.status(400).json({ code: 400, message: result.message }); } } catch (error) { console.error('发送好友请求失败:', error); res.status(500).json({ code: 500, message: '发送好友请求失败' }); } }); /** * GET /api/front/friends/requests - 获取好友请求列表 */ router.get('/friends/requests', authMiddleware, (req, res) => { try { const { page = 1, pageSize = 100 } = req.query; const result = friendsStore.getFriendRequests( req.userId, parseInt(page, 10), parseInt(pageSize, 10) ); res.json({ code: 200, message: 'success', data: result }); } catch (error) { console.error('获取好友请求失败:', error); res.status(500).json({ code: 500, message: '获取好友请求失败' }); } }); /** * POST /api/front/friends/requests/:requestId/handle - 处理好友请求 */ router.post('/friends/requests/:requestId/handle', authMiddleware, (req, res) => { try { const { requestId } = req.params; const { accept } = req.body; if (typeof accept !== 'boolean') { return res.status(400).json({ code: 400, message: '请指定是否接受请求' }); } const result = friendsStore.handleFriendRequest( parseInt(requestId, 10), req.userId, accept ); if (result.success) { res.json({ code: 200, message: accept ? '已添加好友' : '已拒绝请求' }); } else { res.status(400).json({ code: 400, message: result.message }); } } catch (error) { console.error('处理好友请求失败:', error); res.status(500).json({ code: 500, message: '处理好友请求失败' }); } }); /** * DELETE /api/front/friends/:friendId - 删除好友 */ router.delete('/friends/:friendId', authMiddleware, (req, res) => { try { const { friendId } = req.params; const result = friendsStore.removeFriend( req.userId, parseInt(friendId, 10) ); if (result.success) { res.json({ code: 200, message: '已删除好友' }); } else { res.status(400).json({ code: 400, message: result.message || '删除失败' }); } } catch (error) { console.error('删除好友失败:', error); res.status(500).json({ code: 500, message: '删除好友失败' }); } }); module.exports = router;