From 5b488f5a59b6ea0a5d8f2173a7b92d324b73a904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Wed, 23 Sep 2026 11:51:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E5=AE=9A=E4=BB=B7=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=9C=AF=E8=AF=AD=E4=B8=8E=20Tripo=20=E6=8A=80?= =?UTF-8?q?=E6=9C=AF=E6=96=B9=E6=A1=88=E7=9A=84=E4=B9=90=E8=A7=82=E9=94=81?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CONTEXT.md 补「定价版本(乐观锁)」术语,并在 3D 生成定价条目写明权威事实源与公开投影 - Tripo 技术方案补后台保存的版本比对与 409 语义 --- CONTEXT.md | 8 ++++++-- .../【技术方案】Tripo 3D生成API集成-2026-09-21.md | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CONTEXT.md b/CONTEXT.md index 929d2fe34..2c40ecd37 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -105,8 +105,12 @@ _Avoid_: 任意远程 URL、data URL、未区分语义的 resourceId/assetId 字 _Avoid_: 独立 3D 生成页、把 3D 生成做成玩法类型或作品、把 3D 生成接进画布 Agent 对话 **3D 生成定价**: -3D 模型生成工具在提交前展示的泥点价格,来自编辑器生成定价查询的 `model3d` 段;该段缺失即入口不可提交,前端不内置兜底数值。 -_Avoid_: 前端写死 3D 价格、借用图片模型的兜底定价配置、按 0 元放行 +3D 模型生成工具在提交前展示的泥点价格,来自编辑器生成定价查询的 `model3d` 段;该段缺失即入口不可提交,前端不内置兜底数值。该段的权威事实源是 SpacetimeDB 定价表里的两段强类型列,公开读取时投影回迁移前的旧形状。 +_Avoid_: 前端写死 3D 价格、借用图片模型的兜底定价配置、按 0 元放行、把内部两段结构直接暴露给画布 + +**定价版本(乐观锁)**: +后台读取完整模型定价时一并拿到的版本号(SpacetimeDB 行的更新时间微秒值),保存时必须原样回传;与服务端当前版本不一致即整笔拒绝并返回 409,提示重新读取,避免静默覆盖他人的改价。 +_Avoid_: 在前端自造或缓存该版本、把版本不匹配当成可重试的普通失败、把「省略字段」当成「沿用当前值」 ### 3D 模型资源预览 diff --git a/docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md b/docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md index 920edbce2..1760ccde4 100644 --- a/docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md +++ b/docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md @@ -135,7 +135,7 @@ price = <端点段>.versionPrices[modelVersion][texture ? "texture" : "noTexture `model3d` 段缺失仍是合法形态:缺失即 3D 定价未配置,提交被拒绝(fail closed),既不扣费也不调用 provider;段存在时走上面的强校验路径。 -2026-09-23 起这两段的事实源是 SpacetimeDB `editor_generation_pricing_config` 的两段强类型列,后台「模型定价」页面直接编辑,保存与 `models` 段在同一事务内生效,改价不再需要改文件或重启进程。读取方向按契约归一化:表内缺键用默认 JSON / 覆盖文件同段值补齐,契约之外的遗留键剔除并告警;写入方向要求两段完整合法。公开读模型 `GET /api/editor/generation-pricing` 的 3D 段形状保持不变,画布 3D 入口的价格真相与前端零兜底口径不变。详见 [ADR 0005](../adr/【ADR】0005-3D生成定价迁入SpacetimeDB与后台编辑-2026-09-23.md) 与 [编辑器模型定价配置管理方案](../【编辑器】模型定价配置管理方案-2026-06-22.md)。 +2026-09-23 起这两段的事实源是 SpacetimeDB `editor_generation_pricing_config` 的两段强类型列,后台「模型定价」页面直接编辑,保存与 `models` 段在同一事务内生效,改价不再需要改文件或重启进程。读取方向按契约归一化:表内缺键用默认 JSON / 覆盖文件同段值补齐,契约之外的遗留键剔除并告警;写入方向要求两段完整合法。后台保存携带读取时拿到的定价版本,procedure 在事务内比对,不一致返回 409 并要求重新读取。公开读模型 `GET /api/editor/generation-pricing` 的 3D 段形状保持不变,画布 3D 入口的价格真相与前端零兜底口径不变。详见 [ADR 0005](../adr/【ADR】0005-3D生成定价迁入SpacetimeDB与后台编辑-2026-09-23.md) 与 [编辑器模型定价配置管理方案](../【编辑器】模型定价配置管理方案-2026-06-22.md)。 扣费依据固定为**提交时定价**:用户在提交前就能得到确定价格,失败退款是单次冲正,不需要按实际消耗退差额。provider 返回的实际消耗只写日志用于成本对账,不进入契约、不进 API 响应、不进资源行。