diff --git a/server-rs/crates/spacetime-client/src/active.rs b/server-rs/crates/spacetime-client/src/active.rs index b0ee057ca..df8611394 100644 --- a/server-rs/crates/spacetime-client/src/active.rs +++ b/server-rs/crates/spacetime-client/src/active.rs @@ -27,10 +27,11 @@ pub use game_distribution::{ GameDistributionConfirmPackageRecordInput, GameDistributionCreateGameRecordInput, GameDistributionCreateVersionRecordInput, GameDistributionFailUploadRecordInput, GameDistributionGetGameRecordInput, GameDistributionOwnerGameListRecordInput, - GameDistributionPublicGameListRecordInput, GameDistributionRejectRecordInput, - GameDistributionRestoreRecordInput, GameDistributionReviewGameListRecordInput, - GameDistributionReviewModerationRecordInput, GameDistributionSubmitReviewRecordInput, - GameDistributionSuspendRecordInput, GameDistributionUnpublishRecordInput, + GameDistributionPlayCountIncrementRecordInput, GameDistributionPublicGameListRecordInput, + GameDistributionRejectRecordInput, GameDistributionRestoreRecordInput, + GameDistributionReviewGameListRecordInput, GameDistributionReviewModerationRecordInput, + GameDistributionSubmitReviewRecordInput, GameDistributionSuspendRecordInput, + GameDistributionUnpublishRecordInput, }; #[path = "active/external_generation.rs"] pub mod external_generation; diff --git a/server-rs/crates/spacetime-client/src/game_distribution.rs b/server-rs/crates/spacetime-client/src/game_distribution.rs index 6e45c41a1..7e293a8f1 100644 --- a/server-rs/crates/spacetime-client/src/game_distribution.rs +++ b/server-rs/crates/spacetime-client/src/game_distribution.rs @@ -51,6 +51,13 @@ pub struct GameDistributionGetGameRecordInput { pub owner_user_id: Option, } +/// 单次游玩计数增量;同一批次内每个 `game_id` 只出现一次。 +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct GameDistributionPlayCountIncrementRecordInput { + pub game_id: String, + pub delta: u64, +} + #[derive(Clone, Debug, PartialEq, Eq)] pub struct GameDistributionCreateGameRecordInput { pub game_id: String, @@ -560,6 +567,49 @@ impl SpacetimeClient { .await } + /// 批量累加已公开游戏的游玩次数;非公开游戏由事务静默跳过。 + pub async fn increment_game_distribution_game_play_counts( + &self, + increments: Vec, + ) -> Result<(), SpacetimeClientError> { + let input = crate::module_bindings::GameDistributionPlayCountIncrementInput { + increments: increments + .into_iter() + .map( + |increment| crate::module_bindings::GameDistributionPlayCountIncrement { + game_id: increment.game_id, + delta: increment.delta, + }, + ) + .collect(), + }; + self.call_after_connect( + "increment_game_distribution_game_play_counts", + move |connection, sender| { + connection + .procedures() + .increment_game_distribution_game_play_counts_and_return_then( + input, + move |_, result| { + let mapped = result + .map_err(SpacetimeClientError::from_sdk_error) + .and_then(|result| { + if result.ok { + Ok(()) + } else { + Err(SpacetimeClientError::procedure_failed( + result.error_message, + )) + } + }); + send_once(&sender, mapped); + }, + ); + }, + ) + .await + } + pub async fn create_game_distribution_game( &self, input: GameDistributionCreateGameRecordInput,