//! 资产写入命令。 //! //! 用于表达确认资产对象、绑定实体槽位和查询资产历史的输入,不直接访问 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, pub object_key: String, pub content_type: Option, pub content_length: Option, pub content_hash: Option, pub asset_kind: String, pub access_policy: Option, pub source_job_id: Option, pub owner_user_id: Option, pub profile_id: Option, pub entity_id: Option, } #[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, pub content_length: u64, pub content_hash: Option, pub version: u32, pub source_job_id: Option, pub owner_user_id: Option, pub profile_id: Option, pub entity_id: Option, 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, pub profile_id: Option, pub updated_at_micros: i64, } impl From 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 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, } } }