fix: 修复个人中心不显示新发表的评论问题
问题描述: - 用户在事件中心发表评论后,打开个人中心看不到新评论 - 个人中心"我的评论"区域始终为空或显示旧数据 根本原因: - 项目存在两套独立的评论系统: 1. 旧系统(EventComment 表)- 个人中心查询此表 2. 新系统(Post 表)- 事件中心写入此表 - 创建评论时写入 Post 表,但个人中心查询 EventComment 表 - 两个表完全独立,数据不同步 修复方案(统一到 Post 系统): 1. 后端新增 API:GET /api/account/events/posts - 查询 Post 表中当前用户的所有评论 - 返回格式完全兼容旧 EventComment.to_dict() - 新增 event_title 字段(改进点,旧 API 没有) 2. 前端修改 API 调用:Center.js - 将 /api/account/events/comments 改为 /api/account/events/posts - 无需修改数据渲染逻辑(格式兼容) 修改文件: - app.py (第 4144-4187 行) - 新增 get_my_event_posts API - 查询 Post 表(user_id 过滤 + 按时间倒序) - JOIN 查询关联的 Event(获取 event_title) - 返回兼容格式:author(字符串), likes, created_at, event_title - src/views/Dashboard/Center.js (第 105 行) - 修改 API 调用路径 - 修改前:GET /api/account/events/comments - 修改后:GET /api/account/events/posts 数据兼容性: - author 字段:字符串类型(与旧 EventComment 一致) - likes 字段:映射自 likes_count - created_at 字段:ISO 8601 格式 - 新增:event_title 字段(个人中心可显示评论关联的事件) 修复效果: - 用户在事件中心发表评论 → 立即在个人中心看到新评论 ✅ - 评论显示完整信息:内容、时间、关联事件标题 ✅ - 前端无需修改渲染逻辑(完全兼容) ✅ 🤖 Generated with Claude Code
This commit is contained in:
46
app.py
46
app.py
@@ -4141,6 +4141,52 @@ def get_my_event_comments():
|
||||
return jsonify({'success': True, 'data': [c.to_dict() for c in comments]})
|
||||
|
||||
|
||||
@app.route('/api/account/events/posts', methods=['GET'])
|
||||
def get_my_event_posts():
|
||||
"""获取我在事件上的帖子(Post)- 用于个人中心显示"""
|
||||
if 'user_id' not in session:
|
||||
return jsonify({'success': False, 'error': '未登录'}), 401
|
||||
|
||||
try:
|
||||
# 查询当前用户的所有 Post(按创建时间倒序)
|
||||
posts = Post.query.filter_by(
|
||||
user_id=session['user_id'],
|
||||
status='active'
|
||||
).order_by(Post.created_at.desc()).limit(100).all()
|
||||
|
||||
posts_data = []
|
||||
for post in posts:
|
||||
# 获取关联的事件信息
|
||||
event = Event.query.get(post.event_id)
|
||||
event_title = event.title if event else '未知事件'
|
||||
|
||||
# 获取用户信息
|
||||
user = User.query.get(post.user_id)
|
||||
author = user.username if user else '匿名用户'
|
||||
|
||||
# ⚡ 返回格式兼容旧 EventComment.to_dict()
|
||||
posts_data.append({
|
||||
'id': post.id,
|
||||
'event_id': post.event_id,
|
||||
'event_title': event_title, # ⚡ 新增字段(旧 API 没有)
|
||||
'user_id': post.user_id,
|
||||
'author': author, # ⚡ 兼容旧格式(字符串类型)
|
||||
'content': post.content,
|
||||
'title': post.title, # Post 独有字段(可选)
|
||||
'content_type': post.content_type, # Post 独有字段
|
||||
'likes': post.likes_count, # ⚡ 兼容旧字段名
|
||||
'created_at': post.created_at.isoformat(),
|
||||
'updated_at': post.updated_at.isoformat(),
|
||||
'status': post.status,
|
||||
})
|
||||
|
||||
return jsonify({'success': True, 'data': posts_data})
|
||||
|
||||
except Exception as e:
|
||||
print(f"获取用户帖子失败: {e}")
|
||||
return jsonify({'success': False, 'error': '获取帖子失败'}), 500
|
||||
|
||||
|
||||
@app.route('/api/account/future-events/following', methods=['GET'])
|
||||
def get_my_following_future_events():
|
||||
"""获取当前用户关注的未来事件"""
|
||||
|
||||
@@ -102,7 +102,7 @@ export default function CenterDashboard() {
|
||||
const [w, e, c] = await Promise.all([
|
||||
fetch(base + `/api/account/watchlist?_=${ts}`, { credentials: 'include', cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }),
|
||||
fetch(base + `/api/account/events/following?_=${ts}`, { credentials: 'include', cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }),
|
||||
fetch(base + `/api/account/events/comments?_=${ts}`, { credentials: 'include', cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }),
|
||||
fetch(base + `/api/account/events/posts?_=${ts}`, { credentials: 'include', cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }),
|
||||
]);
|
||||
const jw = await w.json();
|
||||
const je = await e.json();
|
||||
|
||||
Reference in New Issue
Block a user