🔴 P0 安全: .env入gitignore, CSP/HSTS, Logo安全(5MB限制+SVG消毒+SHA256), middleware权限收紧(VIP不能访问admin), 发布去重, GitHub认证, 删除危险API, skill-discoverer绕过审核修复, prisma默认连接修复 🔴 P0 可靠性: deepseek/github超时重试, 脚本层DeepSeek保护, 脚本启动验证, OAuth竞态修复 🔴 P0 性能: skill-discoverer N+1优化(↓94%), 后台API分页限制, getUserStats聚合优化 🟡 P1: 分类动态加载, 星级字段统一, fetch-logos并发Bug修复, 批量发布冲突不删除, check-tools重试, 前端空指针修复(13处), logo-fetcher日志, rate-limit清理, 公开API缓存
173 lines
9.5 KiB
Plaintext
173 lines
9.5 KiB
Plaintext
# 追光AI 变更日志
|
||
|
||
## 2026-05-25 全面审查优化(三轮扫描 + 43项修复)
|
||
|
||
### 🔴 P0 安全修复
|
||
- **.env入.gitignore**: `.env` 和 `.env.production` 加入忽略列表,创建 `.env.example` 模板文件
|
||
- **CSP/HSTS安全头**: next.config.mjs 添加 Content-Security-Policy、Strict-Transport-Security、Permissions-Policy
|
||
- **Logo安全加固**: 5MB大小限制 + SVG script/iframe/on-event 标签消毒 + MD5→SHA256
|
||
- **middleware权限收紧**: VIP用户不再能访问 /admin/* 和 /api/admin/*,仅admin角色可访问
|
||
- **单条发布去重**: pending-skills/[id]/publish 添加 name/sourceUrl/slug 三重去重检查,冲突返回409
|
||
- **Web更新星级GitHub认证**: update-stars API 添加 GITHUB_TOKEN 环境变量认证(限流60→5000次/小时)
|
||
- **删除危险API**: pending-skills/route.ts 的 DELETE 方法(原可无条件清空全表)已移除
|
||
- **skill-discoverer绕过审核**: Web自动发现统一改为写 pendingSkill 表(status:pending),不再跳过审核
|
||
- **prisma默认连接修复**: DATABASE_URL未设置时抛出明确错误,移除硬编码默认连接串
|
||
|
||
### 🔴 P0 可靠性修复
|
||
- **deepseek.ts超时重试**: OpenAI客户端添加 timeout:120000 + maxRetries:2,模型名改为 DEEPSEEK_MODEL 环境变量
|
||
- **github.ts超时重试**: Octokit 添加 timeout:30000,新增 withRetry 指数退避重试,403/404/422 不重试
|
||
- **脚本层DeepSeek保护**: 4个定时脚本(daily-discover/daily-news/task1/task6)添加 AbortSignal.timeout(120000) + withRetry 重试
|
||
- **脚本启动验证**: 定时脚本启动时验证 DEEPSEEK_API_KEY + DATABASE_URL 存在性
|
||
- **auth.ts OAuth竞态修复**: GitHub OAuth 并发创建用户时 P2002 唯一约束冲突自动回退 findFirst
|
||
|
||
### 🔴 P0 性能修复
|
||
- **skill-discoverer N+1优化**: 批量预加载 sourceUrl/slug/分类到内存 Set,DB查询从 ~360次 降至 ~22次(↓94%)
|
||
- **后台API分页限制**: 6个管理后台 API findMany 添加 take:500/1000 防全表扫描
|
||
- **getUserStats优化**: 改用 _count 聚合替代加载全量关联记录取 .length
|
||
|
||
### 🟡 P1 修复
|
||
- **分类动态加载**: discover-tools 页面分类列表从硬编码改为 /api/categories 动态加载
|
||
- **星级字段统一**: update-stars API 同时写入 rating + githubStars,统一提取 starsToRating() 函数
|
||
- **fetch-logos并发Bug修复**: processWithConcurrency 改用 Set<Promise> + then(cleanup) 模式
|
||
- **批量发布冲突不删除**: 冲突工具改为跳过标记,不再静默物理删除
|
||
- **check-tools API重试**: 添加指数退避重试(最多2次)
|
||
- **前端空指针修复**: 13处 email?.split / overallAvg?.toFixed / createdAt?.toLocaleDateString 可选链
|
||
- **logo-fetcher日志**: 9处空白 catch 块添加 console.warn 日志
|
||
- **rate-limit清理**: 每5分钟自动清理过期IP记录,防止内存无限增长
|
||
- **公开API缓存**: 5个公开API添加 Cache-Control 响应头(30s~300s分级缓存)
|
||
|
||
### 🔴 已修复的前台Bug
|
||
- **/reviews 评测列表不显示**: ReviewsList.tsx 添加 useEffect 在挂载时触发初始数据加载
|
||
|
||
### 📁 变更统计
|
||
| 类型 | 数量 |
|
||
|------|------|
|
||
| 修改文件 | ~55个 |
|
||
| 新增文件 | 1个(.env.example) |
|
||
| 修复问题 | 43项 |
|
||
| TypeScript检查 | 零错误通过 |
|
||
|
||
---
|
||
|
||
## 2026-05-25 页面重构 + HeroBanner五色方案
|
||
|
||
### 🎨 页面重构为三栏布局
|
||
- **统一布局**: `grid-cols-[208px_1fr_280px]` (左侧栏208px + 内容区 + 右侧栏280px)
|
||
- **/reviews**: HeroBanner + 左侧(外部热度排行+评测分值排行) + 右侧(五维模型+评测说明)
|
||
- **/community**: HeroBanner + 左侧(本月活跃用户+积分排行) + 右侧(社区指南)
|
||
- **/daily**: 保持原有三栏结构
|
||
|
||
### 🌈 HeroBanner 五色方案
|
||
- **重构组件**: 从三元表达式改为 `SCHEMES` 配置表,代码量从560行减至410行
|
||
- **5种配色**:
|
||
| 页面 | 配色 | 背景渐变色 | 高亮色 |
|
||
|------|------|-----------|--------|
|
||
| 首页 `/` | 🔵 cosmos 星空蓝 | `#1e3a5f → #1d4ed8` | `#93c5fd` |
|
||
| 技能 `/skills` | 🩷 crimson 玫红 | `#881337 → #e11d48` | `#fda4af` |
|
||
| 日报 `/daily` | 🟠 dawn 黎明金 | `#78350f → #a16207` | `#fcd34d` |
|
||
| 评测 `/reviews` | 🟣 aurora 极光紫 | `#4c1d95 → #6d28d9` | `#c4b5fd` |
|
||
| 社区 `/community` | 🟢 forest 森林绿 | `#064e3b → #047857` | `#6ee7b7` |
|
||
- **接口变更**: 旧 `highlightColor + starStyle` → 新 `colorScheme`,一个参数搞定
|
||
|
||
### 📁 新增/修改
|
||
| 文件 | 操作 | 说明 |
|
||
|------|------|------|
|
||
| `src/components/common/HeroBanner.tsx` | 重写 | 5色方案+配置表 |
|
||
| `src/app/reviews/page.tsx` | 重写 | 三栏布局+左侧排行 |
|
||
| `src/app/community/page.tsx` | 重写 | 三栏布局+左侧排行 |
|
||
| `src/app/community/CommunitySidebar.tsx` | 新增 | 活跃用户+积分排行 |
|
||
| `src/app/api/user/rankings/route.ts` | 新增 | 用户排行API |
|
||
| `src/components/layout/Header.tsx` | 修改 | 社区导航图标更换 |
|
||
|
||
---
|
||
|
||
## 2026-05-25 等级体系升级 + 论坛二级分类 + 会员空间
|
||
|
||
### 🔥 20级成长体系 (类似QQ)
|
||
- **从4级扩展到20级**: LV01(0分) → LV20(50000分)
|
||
- **等级图标**: ⭐(初级) → ⭐⭐⭐(中级) → 🌟(高级) → 🌟🌟(精英) → 🌟🌟🌟(大师)
|
||
- **旧等级迁移**: BRONZE→LV01, SILVER→LV03, GOLD→LV06, PLATINUM→LV10
|
||
- `src/lib/level-config.ts` — 20级完整配置(含每日限额表)
|
||
- **迁移脚本**: `scripts/run-migration-manual.mjs` (绕过shadow DB问题)
|
||
|
||
### 🔥 论坛二级分类结构
|
||
- **ForumCategory自引用关系**: parent/children (CategoryHierarchy)
|
||
- **6个父分类 + 24个子分类**:
|
||
- 综合讨论区 → 新手入门/AI资讯/观点讨论
|
||
- AI工具 → 聊天写作/图像创作/视频音频/代码编程/效率办公/数据分析/教育学习
|
||
- 开源技能 → LLM框架/Agent框架/RAG技术/模型训练/部署推理/多模态/数据工程
|
||
- 技术深度 → 算法原理/模型评测/安全对齐/硬件加速
|
||
- 教程与分享 → 入门教程/实战项目/最佳实践
|
||
- 社区互动 → 求助问答/求职招聘/闲聊灌水/反馈建议
|
||
- **修复脚本**: `scripts/fix-forum-categories.mjs` (修正孤立子分类parentId)
|
||
- `/community` 首页更新为显示二级分类结构
|
||
|
||
### 🆕 会员个人空间
|
||
- `/user/[id]` — 会员空间页面(资料/统计/话题/评论)
|
||
- **分享功能**: `ShareButton` 组件(原生API/Twitter/QQ/复制链接)
|
||
- **bio字段**: 用户个人简介,支持编辑(最多500字符)
|
||
- `/user` 页面新增bio编辑区域
|
||
|
||
### 🔧 技术修复
|
||
- 修复所有旧等级引用 (BRONZE → LV01)
|
||
- 修复 ShareButton 构建错误 (Twitter图标 → Link图标)
|
||
- 修复 LevelProgress 动态颜色逻辑 (基于等级数字计算)
|
||
- 数据库迁移标记为已应用: `20260525000000_expand_user_levels`
|
||
|
||
---
|
||
|
||
## 2026-05-24 会员功能优化 + 追光会论坛上线
|
||
|
||
### 🆕 积分体系
|
||
- **PointsHistory** 数据模型 — 记录所有积分变动,含原因/详情/关联信息
|
||
- **4级会员系统**: 青铜🥉(0分) → 白银🥈(100分) → 黄金🥇(500分) → 铂金💎(2000分)
|
||
- **积分规则**: 评论+5/被赞+2/发帖+10/回复+5/评价+8,含每日上限防刷分
|
||
- `src/lib/level-config.ts` — 客户端安全等级配置(无 Prisma 依赖)
|
||
- `src/lib/points-reward.ts` — 积分奖励引擎(rewardPoints / getUserStats / getUserPointsHistory)
|
||
- `/api/user/points` — 积分统计 + 历史查询 API
|
||
|
||
### 🆕 追光会(论坛)
|
||
- **3个新页面**: /community(首页)、/community/[category](板块)、/community/topic/[id](话题详情)
|
||
- **8个论坛板块**: 综合讨论/AI工具推荐/技能分享/技术探讨/教程指南/反馈建议/求职招聘/闲聊灌水
|
||
- **5个论坛API**: 分类/话题(CRUD)/回复(CRUD) 共10个端点
|
||
- **4个论坛组件**: ForumBoard / ForumTopicCard / ForumEditor / NotificationBell
|
||
- **种子脚本**: `scripts/seed-forum-categories.mjs`
|
||
|
||
### 🆕 评论系统(全新实现)
|
||
- `/api/comments` — GET获取(含用户等级/积分)+ POST创建(自动积分奖励+通知)
|
||
- `/api/comments/[id]/like` — 点赞/取消点赞(切换模式,+2分+通知)
|
||
- `CommentCard` — 评论卡片(等级徽章/评分/点赞/嵌套回复)
|
||
- `CommentThread` — 评论列表(分页/排序/回复面板)
|
||
|
||
### 🆕 通知系统
|
||
- `/api/notifications` — GET获取(含未读数)+ PUT标记已读
|
||
- `NotificationBell` — 导航栏通知铃铛(红点/下拉面板/自动已读)
|
||
- 自动触发: 评论回复/评论点赞/话题回复
|
||
|
||
### 🆕 会员UI组件
|
||
- `MemberBadge` — 等级徽章(3种尺寸,支持显示/隐藏积分)
|
||
- `LevelProgress` — 等级进度条(当前等级/下一级/进度百分比)
|
||
|
||
### 🔧 技术改进
|
||
- **NextAuth 类型扩展** (`src/types/next-auth.d.ts`) — Session/User/JWT 包含 level/points
|
||
- **auth.ts 增强** — JWT/Session回调包含 level/points
|
||
- **客户端安全架构** — level-config.ts 与 points-reward.ts 分离,避免客户端打包Node.js原生模块
|
||
- **Header 增强** — 新增社区导航链接 + 通知铃铛 + 会员等级徽章
|
||
- **/user 页面增强** — 积分进度条/积分明细/统计卡片
|
||
|
||
### 修复
|
||
- ForumPost 新增 `isAnswer` 字段(标记最佳回答)
|
||
- Prisma schema 日期默认值修正 `@default(now)` → `@default(now())`
|
||
- 迁移兼容问题处理(`prisma db push` 同步)
|
||
|
||
### 统计数据(本次新增)
|
||
- **新增文件**: 15个
|
||
- **新增API端点**: 15个
|
||
- **新增页面**: 3个
|
||
- **新增组件**: 8个
|
||
- **新增数据模型**: 1个(PointsHistory)
|
||
|
||
---
|
||
|
||
## 2026-05-24 全面技术文档生成
|
||
(详见历史 CHANGELOG 记录) |