use crate::value_objects::{Checksum, DateTimeStamp, SystemId}; #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub enum AssetType { Image, Video, LivePhoto, } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub struct SourceReference { pub volume_id: SystemId, pub relative_path: String, pub checksum: Checksum, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct Asset { pub asset_id: SystemId, pub source_reference: SourceReference, pub asset_type: AssetType, pub mime_type: String, pub file_size: u64, pub is_processed: bool, pub owner_user_id: SystemId, pub created_at: DateTimeStamp, } impl Asset { pub fn new( source_reference: SourceReference, asset_type: AssetType, mime_type: impl Into, file_size: u64, owner: SystemId, ) -> Self { Self { asset_id: SystemId::new(), source_reference, asset_type, mime_type: mime_type.into(), file_size, is_processed: false, owner_user_id: owner, created_at: DateTimeStamp::now(), } } pub fn mark_processed(&mut self) { self.is_processed = true; } }