const express = require('express'); const router = express.Router(); const viewHistoryStore = require('../store/viewHistoryStore'); const roomStore = require('../store/roomStore'); /** * 简单的认证中间件 * 从 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(); } /** * 记录观看历史 * POST /api/front/activity/record-view */ router.post('/record-view', authMiddleware, (req, res) => { try { const { targetType, targetId, targetTitle, coverImage, streamerName, authorName, viewDuration } = req.body; if (!targetType || !targetId) { return res.status(400).json({ code: 400, message: '缺少必要参数' }); } viewHistoryStore.record({ userId: req.userId, targetType, targetId, targetTitle, coverImage, streamerName, authorName, viewDuration }); res.json({ code: 200, message: '记录成功', data: { success: true } }); } catch (error) { console.error('[ViewHistory] 记录观看历史失败:', error); res.status(500).json({ code: 500, message: '记录失败' }); } }); /** * 获取观看历史 * GET /api/front/activity/view-history */ router.get('/view-history', authMiddleware, (req, res) => { try { const { type, page = 1, pageSize = 20 } = req.query; const result = viewHistoryStore.getUserHistory( req.userId, type, parseInt(page), parseInt(pageSize) ); // 补充直播间的实时状态 result.list = result.list.map(item => { if (item.targetType === 'room') { const room = roomStore.getById(item.targetId); if (room) { return { ...item, isLive: room.isLive, viewerCount: room.viewerCount }; } } return item; }); res.json({ code: 200, message: '获取成功', data: result }); } catch (error) { console.error('[ViewHistory] 获取观看历史失败:', error); res.status(500).json({ code: 500, message: '获取失败' }); } }); /** * 清除观看历史 * DELETE /api/front/activity/view-history */ router.delete('/view-history', authMiddleware, (req, res) => { try { const { type } = req.query; viewHistoryStore.clearUserHistory(req.userId, type); res.json({ code: 200, message: '清除成功', data: 'success' }); } catch (error) { console.error('[ViewHistory] 清除观看历史失败:', error); res.status(500).json({ code: 500, message: '清除失败' }); } }); /** * 删除单条观看历史 * DELETE /api/front/activity/view-history/:id */ router.delete('/view-history/:id', authMiddleware, (req, res) => { try { const { id } = req.params; const success = viewHistoryStore.deleteRecord(req.userId, parseInt(id)); if (success) { res.json({ code: 200, message: '删除成功', data: 'success' }); } else { res.status(404).json({ code: 404, message: '记录不存在' }); } } catch (error) { console.error('[ViewHistory] 删除观看历史失败:', error); res.status(500).json({ code: 500, message: '删除失败' }); } }); module.exports = router;