feat: Implement face clustering and media retrieval for persons

This commit is contained in:
2025-11-15 23:39:51 +01:00
parent 0f3e098d6d
commit d444871829
9 changed files with 239 additions and 8 deletions

View File

@@ -20,6 +20,11 @@ pub trait MediaRepository: Send + Sync {
user_id: Uuid,
options: &ListMediaOptions,
) -> CoreResult<(Vec<Media>, i64)>;
async fn list_by_person_id(
&self,
person_id: Uuid,
options: &ListMediaOptions,
) -> CoreResult<(Vec<Media>, i64)>;
async fn update_thumbnail_path(&self, id: Uuid, thumbnail_path: String) -> CoreResult<()>;
async fn delete(&self, id: Uuid) -> CoreResult<()>;
}
@@ -139,4 +144,5 @@ pub trait FaceEmbeddingRepository: Send + Sync {
&self,
face_region_id: Uuid,
) -> CoreResult<Option<FaceEmbedding>>;
async fn list_unassigned_by_user(&self, user_id: Uuid) -> CoreResult<Vec<FaceEmbedding>>;
}

View File

@@ -127,6 +127,15 @@ pub trait PersonService: Send + Sync {
face_region_id: Uuid,
user_id: Uuid,
) -> CoreResult<()>;
async fn cluster_unassigned_faces(&self, user_id: Uuid) -> CoreResult<()>;
async fn list_media_for_person(
&self,
person_id: Uuid,
user_id: Uuid,
options: ListMediaOptions,
) -> CoreResult<PaginatedResponse<Media>>;
}
#[async_trait]