feat: Implement media import functionality with repository and bundle support

This commit is contained in:
2025-11-15 15:24:52 +01:00
parent faed54cb08
commit d7b22bdcb1
10 changed files with 190 additions and 66 deletions

View File

@@ -49,6 +49,7 @@ impl From<&str> for MediaMetadataSource {
}
}
#[derive(Clone)]
pub struct Media {
pub id: uuid::Uuid,
pub owner_id: uuid::Uuid,
@@ -148,7 +149,6 @@ pub struct AlbumShare {
pub permission: AlbumPermission,
}
pub struct MediaBundle {
pub media: Media,
pub metadata: Vec<MediaMetadata>,
@@ -188,4 +188,4 @@ pub struct PersonShare {
pub person_id: uuid::Uuid,
pub user_id: uuid::Uuid,
pub permission: PersonPermission,
}
}

View File

@@ -7,7 +7,7 @@ use crate::{
Album, AlbumPermission, FaceRegion, Media, MediaMetadata, Person, PersonPermission, Tag,
User,
},
schema::ListMediaOptions,
schema::{ListMediaOptions, MediaImportBundle},
};
#[async_trait]
@@ -121,3 +121,8 @@ pub trait PersonShareRepository: Send + Sync {
user_id: Uuid,
) -> CoreResult<Vec<(Person, PersonPermission)>>;
}
#[async_trait]
pub trait MediaImportRepository: Send + Sync {
async fn create_media_bundle(&self, bundle: MediaImportBundle) -> CoreResult<()>;
}

View File

@@ -1,4 +1,4 @@
use crate::models::AlbumPermission;
use crate::models::{AlbumPermission, Media, MediaMetadata};
pub struct UploadMediaData<'a> {
pub owner_id: uuid::Uuid,
@@ -74,4 +74,10 @@ pub struct ListMediaOptions {
pub struct MetadataFilter {
pub tag_name: String,
pub tag_value: String,
}
}
pub struct MediaImportBundle {
pub media_model: Media,
pub metadata_models: Vec<MediaMetadata>,
pub file_size: i64,
}