包含: - furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画) - autocad-plugin:AutoCAD 家具导出插件源码 - 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
安装顺序后端编排收口(2026-02-26)
问题
- 前端执行“保存安装顺序 -> 生成步骤 -> 再拉取步骤”三段串行请求。
- 业务编排落在前端,不符合
API -> Service -> Repository分层。 - 生成失败时存在“安装顺序已落库、步骤未生成”的部分成功风险。
根因
- 缺少后端单接口编排能力,前端不得不串行调用多个接口。
- 安装顺序更新与步骤生成在服务层没有补偿策略。
- 路由层仅做最小校验,缺少输入上限防护。
方案
- 新增接口:
POST /api/products/[id]/assembly/generate-from-order。 - Route 仅做参数校验(含重复
panelId/order)与统一响应处理。 - Service 新增
saveInstallOrderAndGenerateStepsForUser:- 先保存安装顺序;
- 再生成步骤(
save=true); - 返回最新步骤列表供前端直接渲染。
- 失败补偿:
- 保存前快照原安装顺序;
- 生成失败时回滚安装顺序,避免半成功状态。
- 风险收口:
- Route 增加
panels数量上限; - Service 同步增加数量上限,防止多入口规则漂移;
- 请求体增加
content-length防护上限。
- Route 增加
改动文件
src/app/api/products/[id]/assembly/generate-from-order/route.tssrc/server/services/assembly.service.tssrc/server/repositories/panel.repository.tssrc/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展示策略。 - 建议后续补充接口限频与幂等键,进一步降低重复写放大。