domain: add Media Catalog entities (Asset, Metadata, Stack, Derivative, Duplicate)

This commit is contained in:
2026-05-31 03:27:41 +02:00
parent ed6eb0c28a
commit 147206d8a5
12 changed files with 371 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
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<String>,
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;
}
}