追加版本不再把 projectKey 落进版本行

api-server 只在 `POST /games`(创建)路径把 `projectKey` 传给发布事务,路径端点一律传 `None`,避免版本行的 key 与作品行、自然键三方各说各话
This commit is contained in:
2026-10-08 12:44:32 +08:00
parent e04032b7d9
commit 685eb16ec9
@@ -131,6 +131,9 @@ async fn publish_version_core(
let payload: NewGameVersionRequest =
serde_json::from_value(metadata).map_err(|_| bad_request("metadata 字段不合法"))?;
let project_key = normalize_project_key(payload.project_key.as_deref())?;
// `projectKey` 只是**创建作品**的身份锚:`POST /games` 无路径槽时用它派生 `gameId` 并落作品行;
// 追加版本走路径 `{game_id}`,既不回退到(owner, projectKey)找作品,也不把 key 写进版本行。
let is_create_path = matches!(&target, PublishTarget::NewGame);
let requested_version_number = match &target {
PublishTarget::NewGame => 1,
PublishTarget::ExistingVersion { version_number, .. } => *version_number,
@@ -225,7 +228,13 @@ async fn publish_version_core(
let input = GameDistributionPublishVersionRecordInput {
game_id: game_id.clone(),
owner_user_id,
project_key: project_key.clone(),
// 只有创建作品那一次把 `projectKey` 落进作品行(模块 get-or-create 用);追加版本一律 None,
// 避免版本行的 `project_key` 与作品行、自然键三方各说各话。
project_key: if is_create_path {
project_key.clone()
} else {
None
},
version_id,
version_number,
metadata_json,