zhibo/live-streaming/server/routes/friends.js

250 lines
5.5 KiB
JavaScript
Raw Normal View History

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;