478 lines
16 KiB
Markdown
Raw 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.

# 实施计划:从正式系统恢复源码
## 概述
**重要发现**:
- 生产容器使用 Next.js standalone 模式部署,只包含编译后的代码
- **2.2.0版本的TypeScript源码已丢失**
- 服务器上只有1.0.0版本的旧源码
**恢复策略**:
1. ✅ 从生产容器提取编译后的代码(已完成)
2. **反编译编译后的JavaScript代码,恢复TypeScript源码**
3. 对比本地1.0.0源码,补充缺失部分
4. 重建完整的2.2.0版本源码
5. 在影子系统测试验证
6. 部署到生产系统
本计划描述了从编译代码反编译恢复源码、构建验证、部署测试的完整步骤。
## 任务
- [x] 1. 连接正式系统并提取编译后的代码(只读操作)
- ✅ 已确认:生产容器只有编译后的代码(.next目录)
- ✅ 已下载:编译后的API代码(nextjs-api-compiled.tar.gz)
- ✅ 已下载:完整的.next构建目录(nextjs-full-build.tar.gz)
- ✅ 已下载:生产配置文件(package.json等)
- 📋 结论:**必须通过反编译恢复源码**
- _需求: 1.1, 1.2, 1.3, 1.4_
- [ ] 2. 反编译JavaScript代码恢复TypeScript源码
- [ ] 2.1 分析编译后的代码结构
- 查看 nextjs-build/.next/server/app 目录结构
- 识别所有API路由文件
- 识别所有页面组件文件
- 列出需要反编译的文件清单
- _需求: 2.1_
- [ ] 2.2 反编译API路由代码
- 反编译 app/api/materials/route.js → route.ts
- 反编译 app/api/materials/stats/route.js → route.ts
- 反编译 app/api/materials/download/route.js → route.ts
- 反编译 app/api/materials/upload/route.js → route.ts
- 反编译 app/api/categories/route.js → route.ts
- 反编译其他API路由文件
- _需求: 2.1, 2.2_
- [ ] 2.3 反编译页面组件代码
- 反编译 app/page.js → page.tsx
- 反编译 app/profile/page.js → page.tsx
- 反编译 app/admin/page.js → page.tsx
- 反编译 app/edit/[id]/page.js → page.tsx
- 反编译其他页面文件
- _需求: 2.1, 2.2_
- [ ] 2.4 反编译工具库代码
- 从编译代码中提取 lib/prisma.ts
- 从编译代码中提取 lib/s3.ts
- 从编译代码中提取其他lib文件
- _需求: 2.1, 2.2_
- [ ] 2.5 对比本地1.0.0源码
- 对比反编译代码与本地代码的差异
- 识别新增的功能和文件
- 识别修改的逻辑
- 生成差异报告
- _需求: 2.3_
- [ ] 2.6 补充缺失的源码文件
- 从本地1.0.0复制未改动的文件
- 合并反编译代码和本地代码
- 补充类型定义文件
- 补充配置文件
- _需求: 2.3_
- [ ] 2.7 重建完整的项目结构
- 创建完整的 app/ 目录结构
- 创建完整的 components/ 目录
- 创建完整的 lib/ 目录
- 创建完整的 prisma/ 目录
- 确保所有import路径正确
- _需求: 2.4_
- [ ] 3. 检查点 - 审查反编译结果
- 确认所有关键文件都已反编译
- 确认代码逻辑完整
- 询问用户是否继续构建
- [ ] 4. 验证环境配置(关键步骤!)
- [ ] 4.1 检查 `.env` 文件
- ⚠️ **必须确认**以下配置:
- `DATABASE_URL` 包含 `lobechat_stage`(不是 `lobechat`)
- `REDIS_PORT=6380`(不是 `6379`)
- `NEXTAUTH_URL` 指向影子系统端口 5320
- _需求: 4.1, 4.3_
- [ ] 4.2 检查部署脚本
- 确认 `deploy-local-build.ps1` 存在
- 确认使用 `-Target shadow` 参数会操作影子系统容器
- _需求: 4.1, 4.3_
- [ ] 5. 验证文件完整性
- [ ] 5.1 检查关键 API 路由
- 验证 app/api/materials/route.ts 存在
- 验证 app/api/materials/download/route.ts 存在
- 验证 app/api/materials/favorite/route.ts 存在
- 验证 app/api/user/materials/route.ts 存在
- 验证 app/api/admin/users/route.ts 存在
- _需求: 3.1_
- [ ] 5.2 检查关键页面组件
- 验证 app/page.tsx 存在
- 验证 app/profile/page.tsx 存在
- 验证 app/admin/page.tsx 存在
- 验证 app/edit/[id]/page.tsx 存在
- _需求: 3.2_
- [ ] 5.3 检查工具库文件
- 验证 lib/prisma.ts 存在
- 验证 lib/s3.ts 存在
- 验证 lib/chunk-upload.ts 存在
- 验证 lib/image-processor.ts 存在
- 验证 lib/video-processor.ts 存在
- _需求: 3.3_
- [ ] 5.4 生成功能完整性报告
- 列出所有已验证的文件
- 标注缺失的文件(如有)
- _需求: 3.4_
- [ ] 6. 检查点 - 审查完整性报告
- 确认所有关键文件都已恢复
- 询问用户是否继续构建
- [ ] 7. 安装依赖并构建项目
- [ ] 7.1 安装 npm 依赖
- 执行 `npm install`
- 检查是否有依赖安装错误
- _需求: 5.1_
- [ ] 7.2 执行项目构建
- 执行 `npm run build`
- 监控构建过程
- _需求: 5.2_
- [ ] 7.3 处理构建错误(如有)
- 查看构建日志
- 识别错误原因
- 修复错误并重新构建
- _需求: 5.3_
- [ ] 7.4 验证构建输出
- 检查 .next 目录是否存在
- 检查 .next/server 目录是否包含必要文件
- 检查 .next/static 目录是否包含静态资源
- _需求: 5.4_
- [ ] 8. 检查点 - 确认构建成功并验证环境配置
- 确认构建无错误
- ⚠️ **关键检查**: 打开 `.env` 文件,逐行验证:
- [ ] `DATABASE_URL` 包含 `lobechat_stage`
- [ ] `REDIS_PORT=6380`
- [ ] `NEXTAUTH_URL` 包含端口 `5320`
- [ ] 没有任何配置指向正式系统
- 询问用户确认环境配置正确后再继续部署
- [ ] 9. 部署到影子系统(严格验证环境隔离)
- [ ] 9.1 部署前最终检查
- ⚠️ **停止!先完成以下检查**:
- [ ] 确认 `deploy-local-build.ps1` 脚本存在
- [ ] 打开脚本,确认 `-Target shadow` 参数会:
- 操作容器 `youyidian-3d-material-shadow`(不是 `youyidian-3d-material`)
- 使用端口 `5320`(不是 `4320`)
- 使用数据库 `lobechat_stage`(不是 `lobechat`)
- [ ] 确认 `.env` 文件配置正确(再次检查)
- _需求: 6.1, 6.2_
- [ ] 9.2 执行部署脚本
- 运行 `.\deploy-local-build.ps1 -Target shadow`
- 监控部署过程,注意任何错误信息
- ⚠️ 如果看到任何关于正式系统的提示,**立即停止**
- _需求: 6.1, 6.2_
- [ ] 9.3 验证容器状态
- 检查影子系统容器 `youyidian-3d-material-shadow` 是否正在运行
- 检查容器日志是否有错误
- ⚠️ **同时检查**正式系统容器 `youyidian-3d-material` 状态,确认未受影响
- _需求: 6.3_
- [ ] 9.4 验证网络访问
- 使用浏览器访问 http://192.168.58.20:5320
- 确认页面能够正常加载
- ⚠️ **不要访问** http://192.168.58.20:4320(正式系统)
- _需求: 6.4_
- [ ] 9.5 验证数据库连接
- 在影子系统上执行一个简单操作(如查看素材列表)
- 通过数据库工具连接 `lobechat_stage`,确认有新的操作记录
- ⚠️ **同时检查** `lobechat` 数据库,确认没有新的记录(证明影子系统没有连接到正式数据库)
- _需求: 6.3_
- [ ] 10. 功能测试 - 用户认证
- [ ] 10.1 测试钉钉登录
- 点击钉钉登录按钮
- 完成钉钉授权流程
- 验证登录成功
- _需求: 7.1_
- [ ] 10.2 测试邮箱登录
- 使用测试账号登录
- 验证登录成功
- _需求: 7.1_
- [ ] 11. 功能测试 - 素材管理
- [ ] 11.1 测试素材浏览
- 访问首页
- 验证瀑布流布局正常显示
- 验证素材卡片信息完整
- _需求: 7.2_
- [ ] 11.2 测试素材筛选
- 测试按素材类型筛选
- 测试按使用店铺筛选
- 测试按场景类别筛选
- 测试按产品类别筛选
- 测试按月份筛选
- _需求: 7.3_
- [ ] 11.3 测试搜索功能
- 在搜索框输入关键词
- 验证防抖处理(输入后500ms才触发搜索)
- 验证搜索结果正确
- _需求: 7.4_
- [ ] 11.4 测试滚动位置保存
- 滚动到页面中间位置
- 点击某个素材进入详情页
- 返回首页
- 验证滚动位置保持不变
- _需求: 7.5_
- [ ] 11.5 测试素材上传
- 点击上传按钮
- 选择素材类型
- 上传文件
- 验证上传成功
- _需求: 7.2_
- [ ] 11.6 测试素材下载
- 点击下载按钮
- 验证下载开始
- 验证下载完成
- _需求: 7.2_
- [ ] 11.7 测试模特类素材下载
- 找到一个模特类素材
- 点击下载按钮
- 验证自动打包成 ZIP 文件
- 验证 ZIP 文件包含所有图片
- _需求: 7.6_
- [ ] 11.8 测试素材编辑
- 点击编辑按钮
- 修改素材信息
- 保存修改
- 验证修改成功
- _需求: 7.2_
- [ ] 11.9 测试点赞功能
- 点击点赞按钮
- 验证点赞数增加
- 再次点击取消点赞
- 验证点赞数减少
- _需求: 7.2_
- [ ] 11.10 测试收藏功能
- 点击收藏按钮
- 验证收藏成功提示
- 在个人中心查看收藏列表
- 验证素材已收藏
- _需求: 7.2_
- [ ] 12. 功能测试 - 管理员功能
- [ ] 12.1 测试用户管理
- 访问管理员页面
- 查看用户列表
- 测试用户搜索
- 测试权限管理
- _需求: 7.7_
- [ ] 12.2 测试素材管理
- 查看所有素材列表
- 测试素材编辑
- 测试素材删除(软删除)
- _需求: 7.7_
- [ ] 12.3 测试回收站
- 查看回收站
- 测试恢复素材
- 测试永久删除
- _需求: 7.7_
- [ ] 12.4 测试分类管理
- 测试使用店铺管理
- 测试场景类别管理
- 测试平台分类管理
- 测试产品类别管理
- _需求: 7.7_
- [ ] 13. 功能测试 - 辅助功能
- [ ] 13.1 测试排行榜
- 打开排行榜面板
- 查看下载榜
- 查看上传榜
- 查看点赞榜
- 测试拖动功能
- _需求: 7.7_
- [ ] 13.2 测试 AI 聊天
- 打开 AI 聊天窗口
- 发送测试消息
- 验证 AI 回复
- _需求: 7.7_
- [ ] 13.3 测试网络诊断
- 打开网络诊断弹窗
- 执行下载测速
- 执行上传测速
- 查看诊断结果
- _需求: 7.7_
- [ ] 14. 检查点 - 审查测试结果并验证正式系统未受影响
- 汇总所有测试结果
- 识别失败的测试项
- ⚠️ **关键验证**:
- [ ] 访问正式系统 http://192.168.58.20:4320,确认正常运行
- [ ] 检查正式系统数据库 `lobechat`,确认没有测试数据
- [ ] 检查正式系统容器日志,确认没有异常
- 询问用户是否需要修复失败的测试项
- [ ] 15. 生成测试报告
- [ ] 15.1 创建功能测试报告
- 列出所有测试项
- 标注通过/失败状态
- 记录测试时间
- _需求: 7.1-7.7_
- [ ] 15.2 对比正式系统和影子系统
- 列出功能差异
- 分析差异原因
- 提出修复建议
- _需求: 7.1-7.7_
- [ ] 16. 更新文档
- [ ] 16.1 更新功能恢复进度文档
- 记录恢复的文件列表
- 记录测试结果
- 更新完成状态
- _需求: 8.1, 8.4_
- [ ] 16.2 记录问题和解决方案
- 记录遇到的问题
- 记录解决方案
- 提供参考链接
- _需求: 8.2_
- [ ] 16.3 更新部署文档
- 更新部署步骤
- 更新配置说明
- 更新注意事项
- _需求: 8.3_
- [ ] 17. 最终检查点
- 确认所有功能已恢复
- 确认所有测试已通过
- 确认文档已更新
- 询问用户是否可以部署到正式系统
- [ ] 18. (可选)修复已知BUG
- ⚠️ **注意**: 此任务仅在源码恢复完成后,如果需要修复BUG时执行
- [ ] 18.1 修复统计API(如需要)
- 文件: `app/api/materials/stats/route.ts`
- 问题: 统计可能包含软删除数据
- 修复: 添加 `where: { deletedAt: null }` 过滤
- _需求: 可选_
- [ ] 18.2 修复分页API(如需要)
- 文件: `app/api/materials/route.ts`
- 问题: 分页逻辑可能有问题
- 修复: 确认 skip 和 take 参数正确应用
- _需求: 可选_
- [ ] 18.3 修复分类统计(如需要)
- 文件: `app/api/categories/route.ts`
- 问题: 分类统计可能包含软删除数据
- 修复: 添加 `deletedAt: null` 过滤
- _需求: 可选_
## ⚠️ 重要注意事项
### 🔴 环境隔离 - 绝对不能混淆!
**正式系统配置(端口 4320):**
- 数据库:`lobechat`(192.168.58.20:5432)
- Redis:端口 `6379`
- 容器名:`youyidian-3d-material`
- 文件存储:容器内 `/app/uploads`
- S3存储:`https://s3.yydd.ai/gongxiangpan`(生产数据)
**影子系统配置(端口 5320):**
- 数据库:`lobechat_stage`(192.168.58.20:5432)
- Redis:端口 `6380`
- 容器名:`youyidian-3d-material-shadow`
- 文件存储:容器内 `/app/uploads`(独立目录)
- S3存储:`https://s3.yydd.ai/gongxiangpan`(可能共享,但要注意文件前缀)
### 🚨 关键操作规则
1. **只读访问正式系统**:
- 只从正式系统**读取**源码文件
- 绝对不要修改正式系统的任何文件
- 绝对不要在正式系统容器内执行写操作
2. **环境变量检查**:
- 提取源码后,**必须**检查 `.env` 文件
- **必须**确认数据库连接指向 `lobechat_stage`
- **必须**确认 Redis 端口是 `6380`
- **绝对不要**使用正式系统的 `.env` 配置
3. **数据库隔离**:
- 影子系统**只能**连接 `lobechat_stage` 数据库
- 部署前**必须**验证数据库配置
- 如果连接错误,**立即停止**部署
4. **文件存储隔离**:
- 影子系统的 uploads 目录与正式系统完全独立
- 不要挂载正式系统的 uploads 目录
- S3 存储如果共享,要注意文件命名避免冲突
5. **部署验证**:
- 部署到影子系统前,**必须**检查 `deploy-local-build.ps1` 脚本
- **必须**确认使用 `-Target shadow` 参数
- **必须**确认脚本不会影响正式系统容器
6. **测试隔离**:
- 所有测试**只在**影子系统(5320端口)进行
- 测试数据**只写入** `lobechat_stage` 数据库
- 绝对不要在正式系统上进行任何测试操作
### 📋 部署前检查清单
在执行任务 9(部署到影子系统)之前,**必须**完成以下检查:
- [ ] 确认 `.env` 文件中 `DATABASE_URL` 包含 `lobechat_stage`
- [ ] 确认 `.env` 文件中 `REDIS_PORT=6380`
- [ ] 确认 `deploy-local-build.ps1` 使用 `-Target shadow` 参数
- [ ] 确认部署脚本不会操作 `youyidian-3d-material` 容器
- [ ] 确认部署脚本只操作 `youyidian-3d-material-shadow` 容器
- [ ] 确认 Docker Compose 配置(如有)使用正确的端口和数据库
### 🛡️ 安全措施
1. **备份**: 虽然只读访问正式系统,但建议先备份正式系统数据库
2. **监控**: 部署后监控正式系统,确认没有受到影响
3. **回滚**: 如果影子系统出现问题,可以快速停止容器,不影响正式系统
## 预计时间
- 任务 1: 提取编译代码 - ✅ 已完成
- 任务 2: 反编译恢复源码 - **120 分钟**(核心任务)
- 任务 3-4: 环境配置和验证 - 20 分钟
- 任务 5-6: 文件完整性验证 - 20 分钟
- 任务 7-8: 构建验证 - 15 分钟
- 任务 9: 部署到影子系统 - 20 分钟
- 任务 10-13: 功能测试 - 60 分钟
- 任务 14-17: 报告和文档 - 25 分钟
**总计**: 约 **4.5 小时**(反编译是最耗时的部分)