250 lines
5.5 KiB
JavaScript
250 lines
5.5 KiB
JavaScript
|
|
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;
|