16 KiB
Raw Blame History

实施计划:从正式系统恢复源码

概述

重要发现:

  • 生产容器使用 Next.js standalone 模式部署,只包含编译后的代码
  • 2.2.0版本的TypeScript源码已丢失
  • 服务器上只有1.0.0版本的旧源码

恢复策略:

  1. ✅ 从生产容器提取编译后的代码(已完成)
  2. 反编译编译后的JavaScript代码,恢复TypeScript源码
  3. 对比本地1.0.0源码,补充缺失部分
  4. 重建完整的2.2.0版本源码
  5. 在影子系统测试验证
  6. 部署到生产系统

本计划描述了从编译代码反编译恢复源码、构建验证、部署测试的完整步骤。

任务

  • 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 验证网络访问

    • 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. 检查点 - 审查测试结果并验证正式系统未受影响

    • 汇总所有测试结果
    • 识别失败的测试项
    • ⚠️ 关键验证:
    • 询问用户是否需要修复失败的测试项
  • 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 小时(反编译是最耗时的部分)