diff --git a/docs/project-memory/plans/【实施计划】陶泥儿导出文件草稿化与发布媒体直传-2026-10-06.md b/docs/project-memory/plans/【实施计划】陶泥儿导出文件草稿化与发布媒体直传-2026-10-06.md index aeb679c08..8fb6a0a7b 100644 --- a/docs/project-memory/plans/【实施计划】陶泥儿导出文件草稿化与发布媒体直传-2026-10-06.md +++ b/docs/project-memory/plans/【实施计划】陶泥儿导出文件草稿化与发布媒体直传-2026-10-06.md @@ -138,7 +138,7 @@ - `packages/shared/src/contracts/gameDistribution.ts`:镜像同步;`GameDistributionGameSummary.coverObjectKey` / `screenshots` 维持 objectKey。 **Step 2 spacetime-module** -- `GameDistributionGame`:删 `cover_asset_id`;`cover_object_key` 保留;`screenshots_json` 改为 objectKey 数组。 +- `GameDistributionGame`:**保留 `cover_asset_id` 并标记退役**(保持在原字段位置、宿主不再写入,仅占位,读逻辑不得依赖),避免 SpacetimeDB 破坏性 schema 变更;`cover_object_key` 保留;`screenshots_json` 改为 objectKey 数组。 - `GameDistributionFrozenMetadata`:删 `cover_asset_id`;`screenshots: Vec`(objectKey);删 `GameDistributionFrozenScreenshot.asset_id`。 - `apply_game_distribution_frozen_metadata`、`GameDistributionCreateGameInput` / `GameDistributionUpdateMetadataInput` / `GameDistributionGameSnapshot` 同步。 - 公开读授权:删除 `game_distribution_asset_has_public_read_grant(ctx, asset_object_id)` 及其在 `editor_project_storage::asset_location_has_public_showcase_read_grant` 的调用(发布图不再经素材库读);公开判定迁到新路由的域内判定(已发布且 active + objectKey 命中)。 diff --git a/server-rs/crates/spacetime-client/src/module_bindings/game_distribution_game_type.rs b/server-rs/crates/spacetime-client/src/module_bindings/game_distribution_game_type.rs index 495167a9a..02da2a911 100644 --- a/server-rs/crates/spacetime-client/src/module_bindings/game_distribution_game_type.rs +++ b/server-rs/crates/spacetime-client/src/module_bindings/game_distribution_game_type.rs @@ -14,6 +14,7 @@ pub struct GameDistributionGame { pub description: String, pub category: String, pub tags_json: String, + pub cover_asset_id: Option, pub author_name: Option, pub author_avatar_url: Option, pub device_support_desktop: bool, @@ -49,6 +50,7 @@ pub struct GameDistributionGameCols { pub description: __sdk::__query_builder::Col, pub category: __sdk::__query_builder::Col, pub tags_json: __sdk::__query_builder::Col, + pub cover_asset_id: __sdk::__query_builder::Col>, pub author_name: __sdk::__query_builder::Col>, pub author_avatar_url: __sdk::__query_builder::Col>, pub device_support_desktop: __sdk::__query_builder::Col, @@ -80,6 +82,7 @@ impl __sdk::__query_builder::HasCols for GameDistributionGame { description: __sdk::__query_builder::Col::new(table_name, "description"), category: __sdk::__query_builder::Col::new(table_name, "category"), tags_json: __sdk::__query_builder::Col::new(table_name, "tags_json"), + cover_asset_id: __sdk::__query_builder::Col::new(table_name, "cover_asset_id"), author_name: __sdk::__query_builder::Col::new(table_name, "author_name"), author_avatar_url: __sdk::__query_builder::Col::new(table_name, "author_avatar_url"), device_support_desktop: __sdk::__query_builder::Col::new( diff --git a/server-rs/crates/spacetime-module/src/game_distribution.rs b/server-rs/crates/spacetime-module/src/game_distribution.rs index c86356477..e4aebb90b 100644 --- a/server-rs/crates/spacetime-module/src/game_distribution.rs +++ b/server-rs/crates/spacetime-module/src/game_distribution.rs @@ -738,6 +738,9 @@ pub struct GameDistributionGame { pub(crate) description: String, pub(crate) category: String, pub(crate) tags_json: String, + /// 已退役:封面改用 `cover_object_key`(OSS objectKey)。字段保留且保持在原位,避免 + /// SpacetimeDB 破坏性 schema 变更;宿主不再写入,只占位,读逻辑不得依赖它。 + pub(crate) cover_asset_id: Option, pub(crate) author_name: Option, pub(crate) author_avatar_url: Option, pub(crate) device_support_desktop: bool, @@ -2078,6 +2081,7 @@ fn create_game_distribution_game_tx( description: input.description.unwrap_or_default(), category, tags_json: input.tags_json, + cover_asset_id: None, author_name: input.author_name, author_avatar_url: input.author_avatar_url, device_support_desktop: input.device_support_desktop, @@ -4398,6 +4402,7 @@ mod tests { description: String::new(), category: "其他".to_string(), tags_json: "[]".to_string(), + cover_asset_id: None, author_name: None, author_avatar_url: None, device_support_desktop: true, diff --git a/server-rs/crates/spacetime-module/src/migration.rs b/server-rs/crates/spacetime-module/src/migration.rs index af2f3f0cc..704461678 100644 --- a/server-rs/crates/spacetime-module/src/migration.rs +++ b/server-rs/crates/spacetime-module/src/migration.rs @@ -215,8 +215,8 @@ macro_rules! migration_tables { // 定价:游戏表末尾追加 price_mud_points(默认 0),购买记录含成交价快照与钱包流水 ID。 // 资料随版本冻结:版本表末尾追加 metadata_json,游戏表末尾追加 // cover_object_key / screenshots_json,均为可空列,旧行按“未冻结资料”处理。 - // 媒体去 assetId 化:游戏表删除 cover_asset_id,封面/截图只保留 OSS objectKey - // (封面 cover_object_key、截图 screenshots_json 为 objectKey 字符串数组)。 + // 媒体去 assetId 化:游戏表保留 cover_asset_id 但标记退役(不再写入、仅占位), + // 封面/截图改用 OSS objectKey(封面 cover_object_key、截图 screenshots_json 为 objectKey 字符串数组)。 // 软删除:游戏表末尾追加可空 deleted_at;非空表示作者已删除该作品, // 行本身仍随迁移导出,版本行与冻结资料保持不可变。 game_distribution_game,