furniture-3d-system-Wu/furniture-3d-system/docs/solutions/workflow-issues/assembly-generate-from-order-orchestration-20260226.md
WuYongJie 5821d73291 初始提交:3D家具安装展示系统
包含:
- furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画)
- autocad-plugin:AutoCAD 家具导出插件源码
- 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 14:00:19 +08:00

1.9 KiB
Raw Blame History

安装顺序后端编排收口(2026-02-26)

问题

  • 前端执行“保存安装顺序 -> 生成步骤 -> 再拉取步骤”三段串行请求。
  • 业务编排落在前端,不符合 API -> Service -> Repository 分层。
  • 生成失败时存在“安装顺序已落库、步骤未生成”的部分成功风险。

根因

  1. 缺少后端单接口编排能力,前端不得不串行调用多个接口。
  2. 安装顺序更新与步骤生成在服务层没有补偿策略。
  3. 路由层仅做最小校验,缺少输入上限防护。

方案

  1. 新增接口:POST /api/products/[id]/assembly/generate-from-order。
  2. Route 仅做参数校验(含重复 panelId/order)与统一响应处理。
  3. Service 新增 saveInstallOrderAndGenerateStepsForUser:
    • 先保存安装顺序;
    • 再生成步骤(save=true);
    • 返回最新步骤列表供前端直接渲染。
  4. 失败补偿:
    • 保存前快照原安装顺序;
    • 生成失败时回滚安装顺序,避免半成功状态。
  5. 风险收口:
    • Route 增加 panels 数量上限;
    • Service 同步增加数量上限,防止多入口规则漂移;
    • 请求体增加 content-length 防护上限。

改动文件

  • src/app/api/products/[id]/assembly/generate-from-order/route.ts
  • src/server/services/assembly.service.ts
  • src/server/repositories/panel.repository.ts
  • src/app/products/[id]/assembly/AssemblyEditorWorkspace.tsx

验证

  • npx eslint src/server/services/assembly.service.ts src/server/repositories/panel.repository.ts src/app/api/products/[id]/assembly/generate-from-order/route.ts src/app/products/[id]/assembly/AssemblyEditorWorkspace.tsx 通过
  • npm run type-check -- --pretty false 通过
  • npm test -- tests/lib/install-order-rules.test.ts --runInBand 通过(41/41)

剩余事项

  • 仍需真实联调验证 warnings 展示策略。
  • 建议后续补充接口限频与幂等键,进一步降低重复写放大。