参考模型 create_version 不再要求幂等 key
自然幂等键只由 `(game_id, version_number)` 派生,只校验摘要非空;与生产统一发布「版本号即身份」口径一致,去掉无意义的 Idempotency-Key 必填
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user