后端:spacetime-client 新增游玩计数 facade

- game_distribution.rs:新增 GameDistributionPlayCountIncrementRecordInput 与 increment_game_distribution_game_play_counts,把批次映射为绑定输入并调用增量 procedure,错误转 procedure_failed
This commit is contained in:
2026-10-03 18:06:01 +08:00
parent cc33c39f24
commit 8301b7b25f
2 changed files with 55 additions and 4 deletions
@@ -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;
@@ -51,6 +51,13 @@ pub struct GameDistributionGetGameRecordInput {
pub owner_user_id: Option<String>,
}
/// 单次游玩计数增量;同一批次内每个 `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<GameDistributionPlayCountIncrementRecordInput>,
) -> 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,