Files
Genarrative/server-rs/crates/module-assets/src/commands.rs

106 lines
3.5 KiB
Rust

//! 资产写入命令。
//!
//! 用于表达确认资产对象、绑定实体槽位和查询资产历史的输入,不直接访问 OSS。
use serde::{Deserialize, Serialize};
#[cfg(feature = "spacetime-types")]
use spacetimedb::SpacetimeType;
use crate::domain::{
AssetEntityBindingSnapshot, AssetObjectAccessPolicy, AssetObjectUpsertSnapshot,
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ConfirmAssetObjectInput {
pub bucket: Option<String>,
pub object_key: String,
pub content_type: Option<String>,
pub content_length: Option<u64>,
pub content_hash: Option<String>,
pub asset_kind: String,
pub access_policy: Option<AssetObjectAccessPolicy>,
pub source_job_id: Option<String>,
pub owner_user_id: Option<String>,
pub profile_id: Option<String>,
pub entity_id: Option<String>,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct AssetHistoryListInput {
pub asset_kind: String,
pub limit: u32,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct AssetObjectUpsertInput {
pub asset_object_id: String,
pub bucket: String,
pub object_key: String,
pub access_policy: AssetObjectAccessPolicy,
pub content_type: Option<String>,
pub content_length: u64,
pub content_hash: Option<String>,
pub version: u32,
pub source_job_id: Option<String>,
pub owner_user_id: Option<String>,
pub profile_id: Option<String>,
pub entity_id: Option<String>,
pub asset_kind: String,
pub updated_at_micros: i64,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct AssetEntityBindingInput {
pub binding_id: String,
pub asset_object_id: String,
pub entity_kind: String,
pub entity_id: String,
pub slot: String,
pub asset_kind: String,
pub owner_user_id: Option<String>,
pub profile_id: Option<String>,
pub updated_at_micros: i64,
}
impl From<AssetObjectUpsertInput> for AssetObjectUpsertSnapshot {
fn from(value: AssetObjectUpsertInput) -> Self {
Self {
asset_object_id: value.asset_object_id,
bucket: value.bucket,
object_key: value.object_key,
access_policy: value.access_policy,
content_type: value.content_type,
content_length: value.content_length,
content_hash: value.content_hash,
version: value.version,
source_job_id: value.source_job_id,
owner_user_id: value.owner_user_id,
profile_id: value.profile_id,
entity_id: value.entity_id,
asset_kind: value.asset_kind,
created_at_micros: value.updated_at_micros,
updated_at_micros: value.updated_at_micros,
}
}
}
impl From<AssetEntityBindingInput> for AssetEntityBindingSnapshot {
fn from(value: AssetEntityBindingInput) -> Self {
Self {
binding_id: value.binding_id,
asset_object_id: value.asset_object_id,
entity_kind: value.entity_kind,
entity_id: value.entity_id,
slot: value.slot,
asset_kind: value.asset_kind,
owner_user_id: value.owner_user_id,
profile_id: value.profile_id,
created_at_micros: value.updated_at_micros,
updated_at_micros: value.updated_at_micros,
}
}
}