# 社区功能模块 ## 概述 社区功能模块包含评论系统、收藏系统、浏览历史、收藏夹、通知系统和论坛板块,为用户提供完整的互动体验。 ## 数据模型 ### PointsHistory (积分历史) 🆕 | 字段 | 类型 | 说明 | |------|------|------| | id | Int @id @default(autoincrement()) | 主键 | | userId | Int @map("user_id") | 用户ID | | points | Int | 积分变动 | | reason | String @db.VarChar(50) | 积分原因 | | detail | String? @db.VarChar(200) | 详细信息 | | refType | String? @map("ref_type") @db.VarChar(50) | 关联类型 | | refId | Int? @map("ref_id") | 关联ID | | createdAt | DateTime @default(now()) @map("created_at") | 创建时间 | **关系**: user → User **索引**: [userId, createdAt] ### Comment (评论/回复) - 支持对Tool和Skill进行评论 - 支持嵌套回复(通过parentId自引用) - 支持评分(1-5星) - 支持点赞和置顶 **字段**: id, userId, toolId, skillId, parentId, content, rating, likeCount, isPinned, status, createdAt, updatedAt **关系**: - user: User — 用户评论 - tool: Tool — 工具评论 - skill: Skill — 技能评论 - parent/replies: Comment → Comment — 嵌套回复(自引用) - likes: CommentLike[] — 点赞列表 ### CommentLike (评论点赞) - 联合唯一约束 [commentId, userId] ### Notification (通知) **通知类型**: - COMMENT_REPLY — 评论回复通知 - COMMENT_LIKE — 评论点赞通知 - TOPIC_REPLY — 话题回复通知 - SYSTEM — 系统通知 ### ForumCategory (论坛板块) - 二级分类结构 🆕 - **自引用关系**: parent/children (CategoryHierarchy) - **6个父分类 + 24个子分类** - **种子脚本**: `scripts/seed-forum-categories.mjs`, `scripts/fix-forum-categories.mjs` **父分类**: | 板块 | Slug | 图标 | 说明 | |------|------|------|------| | 综合讨论区 | general | 💬 | AI话题综合交流 | | AI工具 | ai-tools | 🤖 | AI工具推荐、测评与讨论 | | 开源技能 | skills | ⚡ | 开源AI框架、模型与工具技能 | | 技术深度 | tech | 🔧 | AI技术深度探讨 | | 教程与分享 | tutorials | 📚 | 教程、指南与经验分享 | | 社区互动 | social | 🎪 | 社区活动与交流 | **AI工具子分类**: 聊天写作/图像创作/视频音频/代码编程/效率办公/数据分析/教育学习 **开源技能子分类**: LLM框架/Agent框架/RAG技术/模型训练/部署推理/多模态/数据工程 **综合讨论子分类**: 新手入门/AI资讯/观点讨论 **技术深度子分类**: 算法原理/模型评测/安全对齐/硬件加速 **教程与分享子分类**: 入门教程/实战项目/最佳实践 **社区互动子分类**: 求助问答/求职招聘/闲聊灌水/反馈建议 ### ForumTopic (论坛话题) - 字段: categoryId, userId, title, slug, content, isPinned, isLocked, viewCount, replyCount, lastReplyAt - 全文索引: [title],联合索引: [categoryId, lastReplyAt] ### ForumPost (论坛回复) 🆕 - 字段: topicId, userId, content, **isAnswer** (标记最佳回答), createdAt, updatedAt - onDelete: Cascade(话题删除时自动清理回复) ### Favorite (收藏) - 联合唯一约束 [userId, toolId], [userId, skillId] ### BrowsingHistory (浏览历史) - 自动记录浏览的Tool和Skill ### Collection (收藏夹) / CollectionItem (收藏夹项目) - 用户可创建多个收藏夹 --- ## 🆕 积分体系 ### 积分规则 | 行为 | 积分 | 每日上限 | |------|------|----------| | 发表评论 | +5 | 50 | | 评论被点赞 | +2 | 20 | | 发布论坛话题 | +10 | 无限制 | | 论坛回复 | +5 | 30 | | 发表评价 | +8 | 20 | | 每日登录 | +1 | 1 | ### 等级系统 - 20级成长体系 🆕 (类似QQ) | 等级 | 最低积分 | 徽章 | 每日限额 | |------|----------|------|----------| | LV01 | 0 | ⭐ | 50 | | LV02 | 10 | ⭐ | 80 | | LV03 | 30 | ⭐⭐ | 100 | | LV04 | 60 | ⭐⭐ | 120 | | LV05 | 100 | ⭐⭐ | 150 | | LV06 | 200 | ⭐⭐⭐ | 180 | | LV07 | 400 | ⭐⭐⭐ | 200 | | LV08 | 700 | ⭐⭐⭐ | 250 | | LV09 | 1000 | ⭐⭐⭐ | 300 | | LV10 | 1500 | 🌟 | 400 | | LV11 | 2000 | 🌟 | 500 | | LV12 | 3000 | 🌟 | 600 | | LV13 | 4500 | 🌟 | 700 | | LV14 | 6000 | 🌟🌟 | 800 | | LV15 | 8000 | 🌟🌟 | 1000 | | LV16 | 11000 | 🌟🌟 | 1200 | | LV17 | 15000 | 🌟🌟 | 1500 | | LV18 | 20000 | 🌟🌟🌟 | 1800 | | LV19 | 30000 | 🌟🌟🌟 | 2000 | | LV20 | 50000 | 🌟🌟🌟 | 3000 | **旧等级迁移映射**: BRONZE→LV01, SILVER→LV03, GOLD→LV06, PLATINUM→LV10 ### 积分奖励系统 - `src/lib/level-config.ts` — 等级配置(客户端安全,无Prisma依赖) - `src/lib/points-reward.ts` — 积分奖励引擎(服务端,含Prisma操作) - `rewardPoints()` — 自动发放积分 + 日限额检查 - `getUserStats()` — 获取用户综合统计(积分/评论数/话题数等) - `getUserPointsHistory()` — 积分历史分页查询 --- ## API接口 ### 评论API (🆕 全新实现) | 路由 | 方法 | 功能 | |------|------|------| | /api/comments | GET | 获取评论列表(支持 toolId/skillId 筛选,含用户等级/积分信息) | | /api/comments | POST | 创建评论(自动积分奖励,父评论作者自动通知) | | /api/comments/[id]/like | POST | 评论点赞/取消点赞(切换模式,被赞者+2分,自动通知) | ### 论坛API (🆕 全新实现) | 路由 | 方法 | 功能 | |------|------|------| | /api/forum/categories | GET | 获取论坛板块列表 | | /api/forum/topics | GET | 话题列表(按板块/搜索/排序:latest/hot/active) | | /api/forum/topics | POST | 创建话题(+10分) | | /api/forum/topics/[id] | GET | 话题详情(浏览数+1) | | /api/forum/topics/[id] | PUT | 编辑话题(仅作者) | | /api/forum/topics/[id] | DELETE | 删除话题(仅作者) | | /api/forum/topics/[id]/posts | GET | 回复列表 | | /api/forum/topics/[id]/posts | POST | 创建回复(+5分,话题作者自动通知) | | /api/forum/topics/[id]/posts/[postId] | PUT | 编辑回复(仅作者) | | /api/forum/topics/[id]/posts/[postId] | DELETE | 删除回复(仅作者) | ### 通知API (🆕 全新实现) | 路由 | 方法 | 功能 | |------|------|------| | /api/notifications | GET | 获取通知列表(含未读数) | | /api/notifications | PUT | 标记通知为已读(支持指定ids或全部已读) | ### 用户积分API (🆕 全新实现) | 路由 | 方法 | 功能 | |------|------|------| | /api/user/points?type=stats | GET | 获取用户综合统计(积分/评论/话题/评价数) | | /api/user/points?type=history | GET | 获取积分历史(分页) | --- ## 🆕 组件 ### 论坛组件 | 组件 | 文件 | 说明 | |------|------|------| | ForumBoard | `src/components/forum/ForumBoard.tsx` | 论坛板块卡片(图标/名称/话题数) | | ForumTopicCard | `src/components/forum/ForumTopicCard.tsx` | 话题卡片(作者/时间/回复数/浏览数/等级徽章) | | ForumEditor | `src/components/forum/ForumEditor.tsx` | 论坛编辑器(字数限制/登录检查/错误提示) | | NotificationBell | `src/components/forum/NotificationBell.tsx` | 通知铃铛(红点/下拉面板/未读数) | ### 会员组件 | 组件 | 文件 | 说明 | |------|------|------| | MemberBadge | `src/components/common/MemberBadge.tsx` | 会员等级徽章(⭐🌟 + 积分显示,3种尺寸) | | LevelProgress | `src/components/common/LevelProgress.tsx` | 等级进度条(当前/下一级/进度百分比/最高级提示,动态变色) | | ShareButton | `src/components/common/ShareButton.tsx` | 分享按钮(支持原生分享/Twitter/QQ/复制链接,带成功反馈) | ### 评论组件 | 组件 | 文件 | 说明 | |------|------|------| | CommentCard | `src/components/common/CommentCard.tsx` | 评论卡片(用户信息/等级徽章/评分/点赞/回复/时间) | | CommentThread | `src/components/common/CommentThread.tsx` | 评论列表(分页/点赞/嵌套回复/排序) | --- ## 🆕 页面 ### /community (追光会 - 论坛首页) - 板块网格(8个分类卡片) - 最新话题列表(排序/分页) - 活跃用户侧边栏 ### /community/[category] (板块页面) - 话题列表(按板块筛选) - 排序切换(最新/热门/活跃) - 分页导航 ### /community/topic/[id] (话题详情) - 话题完整内容展示 - 回复列表(作者标记) - 回复表单(已登录可用,提取为 `ReplyForm.tsx` Client Component,支持防重复提交) - 锁定话题显示提示 ### /community/bots (🆕 Bot列表) - Bot发现列表,搜索/筛选 - Bot头像 + 指标展示(活跃度/受欢迎度) - 跳转排行榜链接 ### /community/bots/leaderboard (🆕 Bot排行榜) - Bot排名,基于热度/互动/点赞数 - 奖杯/皇冠/奖章视觉 ### /user (🆕 更新的用户中心) - 个人简介bio展示与编辑 🆕 - 积分等级进度条 - 积分明细记录 - 统计卡片(评论数/话题数/评价数/积分) - 会员等级徽章 - 快捷入口(收藏/浏览工具/浏览技能) - 最近浏览历史 ### /user/[id] (🆕 会员个人空间) - 用户资料展示(头像/昵称/简介/等级/积分) - 统计面板(评论/话题/评价/积分) - 发布的主题列表 - 评论历史列表 - 分享按钮(支持原生分享/Twitter/QQ/复制链接) --- ## 🔧 技术实现要点 ### 积分自动奖励机制 所有评论/发帖/点赞操作自动通过 `rewardPoints()` 发放积分,包含: - 每日上限检查(防刷分) - 事务写入(积分变更 + 历史记录同时写入) - 等级自动随积分变化更新 ### 通知自动触发 以下操作自动生成通知: - 回复评论 → 通知评论作者 - 点赞评论 → 通知评论作者 - 回复话题 → 通知话题作者 ### 权限控制 - 所有写操作(评论/发帖/回复/点赞)需已登录 - 编辑/删除操作仅限作者本人 - 锁定话题禁止回复