diff --git a/server-rs/crates/module-game-distribution/src/application.rs b/server-rs/crates/module-game-distribution/src/application.rs index 042e094a6..eabf39f4d 100644 --- a/server-rs/crates/module-game-distribution/src/application.rs +++ b/server-rs/crates/module-game-distribution/src/application.rs @@ -145,17 +145,21 @@ impl GameDistributionService { let package_sha256 = normalize_package_digest(&input.package_sha256)?; validate_package_bytes(input.package_bytes)?; let price_mud_points = normalize_game_price_mud_points(input.price_mud_points)?; - let idem = normalize_idempotency(input.idempotency)?; + // 新版本的自然幂等键只有 `(game_id, version_number)`:调用方不再需要传 key,这里从版本号 + // 派生;只要求摘要非空。`IdempotencyRequest.key` 对这条命令不再有意义。 + let request_digest = normalize_id(input.idempotency.request_digest).ok_or( + GameDistributionError::Field(GameDistributionFieldError::MissingRequestDigest), + )?; let scope = scope( &owner_user_id, GameDistributionAction::CreateVersion, &IdempotencyRequest { key: game_distribution_version_key(&game_id, None, input.version_number), - request_digest: idem.request_digest.clone(), + request_digest: request_digest.clone(), }, ); let mut state = lock(&self.store)?; - if let Some(outcome) = replay_outcome(&state, &scope, &idem.request_digest)? { + if let Some(outcome) = replay_outcome(&state, &scope, &request_digest)? { return version_result(outcome, true); } let game = state @@ -186,7 +190,7 @@ impl GameDistributionService { remember( &mut state, scope, - idem.request_digest, + request_digest, StoredOutcome::Version(snapshot.clone()), ); Ok(GameOperationResult {