游戏表保留 cover_asset_id 并标记退役

- GameDistributionGame 在原位恢复 cover_asset_id,注明退役、只占位不再写入,避免 SpacetimeDB 破坏性 schema 变更
- 新建与测试行构造补 cover_asset_id: None;migration.rs 注释与实施计划改成「保留退役」口径
- 重新生成 spacetime-client 该表绑定,补回 cover_asset_id 字段
This commit is contained in:
2026-10-07 15:31:28 +08:00
parent b4ca794660
commit 4f3ef93098
4 changed files with 11 additions and 3 deletions
@@ -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<String>`(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 命中)。
@@ -14,6 +14,7 @@ pub struct GameDistributionGame {
pub description: String,
pub category: String,
pub tags_json: String,
pub cover_asset_id: Option<String>,
pub author_name: Option<String>,
pub author_avatar_url: Option<String>,
pub device_support_desktop: bool,
@@ -49,6 +50,7 @@ pub struct GameDistributionGameCols {
pub description: __sdk::__query_builder::Col<GameDistributionGame, String>,
pub category: __sdk::__query_builder::Col<GameDistributionGame, String>,
pub tags_json: __sdk::__query_builder::Col<GameDistributionGame, String>,
pub cover_asset_id: __sdk::__query_builder::Col<GameDistributionGame, Option<String>>,
pub author_name: __sdk::__query_builder::Col<GameDistributionGame, Option<String>>,
pub author_avatar_url: __sdk::__query_builder::Col<GameDistributionGame, Option<String>>,
pub device_support_desktop: __sdk::__query_builder::Col<GameDistributionGame, bool>,
@@ -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(
@@ -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<String>,
pub(crate) author_name: Option<String>,
pub(crate) author_avatar_url: Option<String>,
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,
@@ -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,