Files
Genarrative/server-rs/crates/module-assets
kdletters 4863c8c066 后台模板上传(后端):新增批量导入接口与存储/领域支持
- shared-contracts 新增导入 manifest、逐条与结果 DTO(camelCase,拒绝未知字段)
- module-assets 新增 prepare_template_import:新 ID 默认上架,已存在条目就地更新并保留上架状态与未知扩展字段;同一 ID 同版本字节不同时按 CLI 同一句文案拒绝,字节一致时按内容复用既有对象
- platform-oss 为 application/zip 放宽单对象上限到 64 MiB(图片与元数据仍 5 MiB),测试替身同步该口径
- api-server 新增 POST /admin/api/agc-templates/import:multipart(manifest + zip_N/cover_N),逐项校验归档安全性、entry 存在性与封面(按字节嗅探格式,仅 PNG/JPEG/WebP)后才取发布锁
- 锁内流程:CAS 校验 revision → 内容寻址写入 zip/封面/元数据并回读 → 一次提交清单 → 释放锁;断连由独立任务持有,不确定结果保留锁并返回 503
- 路由挂 require_admin_auth 与 200 MiB body 上限,页签权限矩阵与路由契约测试同步
- 新增用例:清单与文件字段校验、归档越界与符号链接拒绝、内容寻址键与封面嗅探、zip 内容类型存储上限
- 新增「后台模板上传」里程碑与实施计划文档
- 验证:cargo test(module-assets 11 项、platform-oss 12 项、api-server 定向 4 项)、cargo fmt --check、check:doc-index、check:encoding、git diff --check
2026-09-21 16:06:23 +08:00
..

module-assets 独立模块 package 占位说明

日期:2026-04-20

1. package 职责

module-assets 是资产任务与对象绑定模块 package,后续负责:

  1. asset_jobasset_objectasset_manifest 等资产状态模型
  2. 角色形象、动作、Qwen 精灵表、场景图、封面图等资产任务编排
  3. 业务实体与 OSS 对象的绑定关系
  4. apps/api-server 的 assets 兼容接口对接
  5. apps/spacetime-module 的资产表、reducer、view 聚合对接

2. 当前阶段说明

当前资产对象主链已完成后端收口:资产对象确认、实体槽位绑定、历史读取、OSS 对象确认、API facade、SpacetimeDB adapter 和资产事件表已经形成同一条后端真相链。与本模块直接相关的基础设施包括:

  1. api-server 已具备 POST /api/assets/direct-upload-tickets
  2. platform-oss 已具备旧 /generated-* 前缀兼容的 PostObject 签名能力
  3. 资产对象引用口径已冻结为 bucket + object_key 双列
  4. module-assets 已落地:
    • AssetObjectAccessPolicy
    • asset_object 字段校验 helper
    • assetobj_ ID 前缀与初始版本常量
    • asset_entity_binding 输入、快照、返回记录与字段校验 helper
    • assetbind_ ID 前缀
  5. WP-AS Assets 资产对象类型归位已完成,领域快照、命令 DTO、应用返回 DTO、领域事件和字段错误已分别落到 DDD 骨架文件中。
  6. asset_event public event table 已承接对象确认与实体绑定变更事实,订阅端和审计流程可以感知资产主链变化。

当前 asset_object 表的字段、索引与可编码约束见:

  1. ../../../docs/【玩法创作】平台入口与玩法链路-2026-05-15.md
  2. ../../../docs/【玩法创作】平台入口与玩法链路-2026-05-15.md
  3. ../../../docs/【玩法创作】平台入口与玩法链路-2026-05-15.md
  4. ../../../docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md
  5. ../../../docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md

当前还已补齐:

  1. AssetObjectService
  2. 私有 bucket HEAD Object 后的对象确认写入
  3. 当前阶段的进程内 asset_object 去重存储
  4. SpacetimeDB asset_object / asset_entity_binding / asset_event adapter 写入
  5. Rust spacetime-client 资产对象确认、绑定和历史 facade

后续与本 package 直接相关的任务包括:

  1. 设计 asset_jobasset_manifest
  2. 设计角色、动作、场景、精灵表相关资产表
  3. 对齐资产生成、发布和专业资产任务编排
  4. 新增资产生成表或专业资产任务时继续复用 OSS read-url 读取链路

3. 边界约束

  1. module-assets 负责资产任务状态、对象引用关系与模块级编排,不把二进制对象本身放回本地持久化目录真相中。
  2. OSS 上传、签名、对象读写等副作用通过平台适配完成,状态最终回写到 apps/spacetime-module 聚合的状态模型中。
  3. 前端兼容接口由 apps/api-server 暴露,但资产任务状态与对象绑定关系不能再次散落到本地文件判断逻辑里。
  4. 后续 SpacetimeDB 中的对象引用统一按 bucket + object_key 两列建模,不存完整 URL 作为真相字段。