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,31 @@
use domain::entities::{AssetStack, StackMemberRole, StackType};
use domain::errors::DomainError;
use domain::value_objects::SystemId;
#[test]
fn new_stack_contains_primary() {
let primary = SystemId::new();
let stack = AssetStack::new(StackType::LivePhoto, primary.clone(), SystemId::new());
assert_eq!(stack.members.len(), 1);
assert_eq!(stack.members[0].asset_id, primary);
assert_eq!(stack.members[0].role, StackMemberRole::PrimaryDisplay);
assert_eq!(stack.members[0].sort_order, 0);
}
#[test]
fn add_motion_clip() {
let mut stack = AssetStack::new(StackType::LivePhoto, SystemId::new(), SystemId::new());
let clip_id = SystemId::new();
stack.add_member(clip_id.clone(), StackMemberRole::MotionClip).unwrap();
assert_eq!(stack.members.len(), 2);
assert_eq!(stack.members[1].asset_id, clip_id);
assert_eq!(stack.members[1].sort_order, 1);
}
#[test]
fn cannot_add_duplicate() {
let primary = SystemId::new();
let mut stack = AssetStack::new(StackType::LivePhoto, primary.clone(), SystemId::new());
let result = stack.add_member(primary, StackMemberRole::HighResSource);
assert!(matches!(result, Err(DomainError::Conflict(_))));
}