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

250 lines
5.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;