refactor: 收口拼图作品更新 payload

This commit is contained in:
2026-06-04 05:19:23 +08:00
parent 9c96535073
commit d44560f330
6 changed files with 80 additions and 48 deletions

View File

@@ -2,7 +2,7 @@
## 背景
`PlatformEntryFlowShellImpl.tsx` 曾内联维护拼图和抓大鹅草稿恢复所需的表单 payload、拼图编译 action payload、作品摘要回填 payload 和 pending 草稿 metadata。壳层因此需要理解拼图描述字段优先级、formDraft 回退、Match3D config / draft / anchorPack 优先级,以及 pending 作品架标题摘要如何从 payload 派生。后续还残留拼图 form-only 草稿判定,影响 action 分流、草稿恢复阶段和结果页渲染。
`PlatformEntryFlowShellImpl.tsx` 曾内联维护拼图和抓大鹅草稿恢复所需的表单 payload、拼图编译 action payload、拼图作品更新 payload、作品摘要回填 payload 和 pending 草稿 metadata。壳层因此需要理解拼图描述字段优先级、formDraft 回退、结果页 draft 到作品更新字段的映射、Match3D config / draft / anchorPack 优先级,以及 pending 作品架标题摘要如何从 payload 派生。后续还残留拼图 form-only 草稿判定,影响 action 分流、草稿恢复阶段和结果页渲染。
这些逻辑都是 DTO 变换;不读取 React state不请求网络也不写 URL。壳层只应决定何时恢复、何时提交 action、何时写入生成状态。
@@ -14,6 +14,7 @@
- `buildPuzzleFormPayloadFromSession(session)`:从拼图 session 恢复创作表单 payload。
- `buildPuzzleFormPayloadFromAction(payload)`:从拼图 action 还原表单 payload仅接受 `compile_puzzle_draft``save_puzzle_form_draft`
- `buildPuzzleCompileActionFromFormPayload(payload)`:从表单 payload 构造拼图编译 action。
- `buildPuzzleWorkUpdatePayloadFromDraft(draft)`:从拼图结果 draft 构造 `updatePuzzleWork(...)` 所需 payload。
- `buildPendingPuzzleDraftMetadata(payload)`:从拼图 payload 派生 pending 作品架 metadata。
- `isPuzzleFormOnlyDraft(session)``isEmptyPuzzleFormOnlyDraft(session)`:判断拼图 session 是否仍只是表单草稿,以及表单草稿是否没有任何可提交内容。
- `buildMatch3DFormPayloadFromSession(session)``buildMatch3DFormPayloadFromWork(item)`:从抓大鹅 session / work 恢复表单 payload。
@@ -27,6 +28,7 @@
- 拼图 session payload 的 `pictureDescription` 优先级固定为 `formDraft.pictureDescription > first level pictureDescription > anchorPack.visualSubject.value > seedText > ''`
- 拼图编译 action 的 `promptText` 来自 `pictureDescription || seedText``workDescription` 缺省回退到图片描述;`candidateCount` 固定为 `1`
- 拼图 action 还原只接受 `compile_puzzle_draft``save_puzzle_form_draft`;其它 action 返回 `null`
- 拼图作品更新 payload 必须直接映射 `workTitle``workDescription``levelName``summary``themeTags``coverImageSrc``coverAssetId``levels` 缺失时回退空数组。
- 拼图 form-only 草稿只在 `session.stage === 'collecting_anchors'` 且存在 `draft.formDraft` 时成立。
- 空 form-only 草稿必须同时缺少 `seedText``formDraft.workTitle``formDraft.workDescription``formDraft.pictureDescription`
- 抓大鹅 session payload 优先读取 `config`,其次 `draft`,最后 `anchorPack``anchorPack.clearCount``anchorPack.difficulty` 只接受有限数字字符串或数字。
@@ -35,9 +37,9 @@
## Depth / Leverage / Locality
- **Depth**:壳层以一组表意函数取得 payload / metadata字段优先级、默认空资产和数字解析藏入 Module Implementation。
- **Leverage**:后续调整拼图或抓大鹅草稿恢复表单时,先改 Module 与单测,再保持壳层 API / state 副作用不变。
- **Locality**:表单恢复与 action payload 规则集中到一个纯测试面,避免在大型平台壳的生成、重试和恢复流程里重复散落 DTO 拼装。
- **Depth**:壳层以一组表意函数取得 payload / metadata字段优先级、结果页 draft 更新字段、默认空资产和数字解析藏入 Module Implementation。
- **Leverage**:后续调整拼图或抓大鹅草稿恢复表单、拼图作品更新字段时,先改 Module 与单测,再保持壳层 API / state 副作用不变。
- **Locality**:表单恢复、作品更新与 action payload 规则集中到一个纯测试面,避免在大型平台壳的生成、重试和恢复流程里重复散落 DTO 拼装。
## 验收