3aa3e33ceb
Project CI / AI game creator shell Rust crates (pull_request) Failing after 56s
Project CI / Backend tests (pull_request) Failing after 23s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 5m7s
Project CI / Repository checks (pull_request) Failing after 21s
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
以 projectVersion 作为 AGC 唯一用户版本,支持同版本重复提交和版本回退。 保留 publicationRevision 并发校验与旧客户端自动递增兼容。
57 lines
1.8 KiB
Rust
57 lines
1.8 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::domain::normalize_id;
|
|
use crate::errors::GameDistributionFieldError;
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct IdempotencyRequest {
|
|
pub key: String,
|
|
pub request_digest: String,
|
|
}
|
|
|
|
impl IdempotencyRequest {
|
|
pub fn validate(&self) -> Result<(), GameDistributionFieldError> {
|
|
if normalize_id(&self.key).is_none() {
|
|
return Err(GameDistributionFieldError::MissingIdempotencyKey);
|
|
}
|
|
if normalize_id(&self.request_digest).is_none() {
|
|
return Err(GameDistributionFieldError::MissingRequestDigest);
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct CreateGameInput {
|
|
pub game_id: String,
|
|
pub owner_user_id: String,
|
|
pub idempotency: IdempotencyRequest,
|
|
pub created_at_micros: i64,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct CreateVersionInput {
|
|
pub game_id: String,
|
|
pub owner_user_id: String,
|
|
pub version_id: String,
|
|
/// 用户可见的正整数版本标签;`None` 时按该游戏已有最大版本号 +1(旧客户端兼容)。
|
|
/// 传入时只要求 `>= 1`:同一 gameId 的同一标签可以反复提交,每次都是一条新版本记录。
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub version_number: Option<u64>,
|
|
pub package_sha256: String,
|
|
pub package_bytes: u64,
|
|
pub idempotency: IdempotencyRequest,
|
|
pub created_at_micros: i64,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum ReviewDecision {
|
|
Approve {
|
|
expected_publication_revision: u64,
|
|
},
|
|
Reject {
|
|
expected_publication_revision: u64,
|
|
reason: String,
|
|
},
|
|
}
|