diff --git a/server-rs/crates/spacetime-module/src/game_distribution.rs b/server-rs/crates/spacetime-module/src/game_distribution.rs index a243c841e..42487c025 100644 --- a/server-rs/crates/spacetime-module/src/game_distribution.rs +++ b/server-rs/crates/spacetime-module/src/game_distribution.rs @@ -1990,6 +1990,24 @@ fn create_game_distribution_version_tx( let version_number = resolve_game_distribution_version_number(max_existing_version, input.version_number)?; let now = Timestamp::from_micros_since_unix_epoch(input.now_micros); + for mut pending in ctx + .db + .game_distribution_version() + .by_game_distribution_version_game_id() + .filter(&game_id) + .filter(|version| { + version.version_number == version_number + && version.status == GAME_DISTRIBUTION_VERSION_PENDING_REVIEW + }) + { + pending.status = GAME_DISTRIBUTION_VERSION_CANCELLED.to_string(); + pending.review_reason = Some("被同一项目版本的新提交替代".to_string()); + pending.updated_at = now; + ctx.db + .game_distribution_version() + .version_id() + .update(pending); + } ctx.db .game_distribution_version() .insert(GameDistributionVersion { @@ -2855,8 +2873,8 @@ fn restore_game_distribution_game_tx( .collect::>(); candidates.sort_by(|left, right| { right - .version_number - .cmp(&left.version_number) + .updated_at + .cmp(&left.updated_at) .then_with(|| right.version_id.cmp(&left.version_id)) }); let mut version = candidates @@ -3189,8 +3207,8 @@ fn admin_game_distribution_game_snapshot( let version_count = versions.len() as u64; versions.sort_by(|left, right| { right - .version_number - .cmp(&left.version_number) + .updated_at + .cmp(&left.updated_at) .then_with(|| right.version_id.cmp(&left.version_id)) }); versions.truncate(GAME_DISTRIBUTION_ADMIN_VERSION_HISTORY_LIMIT); @@ -3347,8 +3365,8 @@ fn list_owner_game_distribution_games_tx( .collect::>(); versions.sort_by(|left, right| { right - .version_number - .cmp(&left.version_number) + .updated_at + .cmp(&left.updated_at) .then_with(|| right.version_id.cmp(&left.version_id)) }); versions.truncate(GAME_DISTRIBUTION_MAX_OWNER_VERSIONS_PER_GAME);