feat: Implement face clustering and media retrieval for persons
This commit is contained in:
@@ -10,10 +10,12 @@ use uuid::Uuid;
|
||||
|
||||
use crate::{
|
||||
error::ApiError,
|
||||
extractors::query_options::ApiListMediaOptions,
|
||||
middleware::auth::UserId,
|
||||
schema::{
|
||||
AssignFaceRequest, CreatePersonRequest, FaceRegionResponse, MergePersonRequest,
|
||||
PersonResponse, SetPersonThumbnailRequest, SharePersonRequest, UpdatePersonRequest,
|
||||
AssignFaceRequest, CreatePersonRequest, FaceRegionResponse, MediaResponse,
|
||||
MergePersonRequest, PaginatedResponse, PersonResponse, SetPersonThumbnailRequest,
|
||||
SharePersonRequest, UpdatePersonRequest, map_paginated_response,
|
||||
},
|
||||
state::AppState,
|
||||
};
|
||||
@@ -31,6 +33,8 @@ pub fn people_routes() -> Router<AppState> {
|
||||
)
|
||||
.route("/{person_id}/merge", post(merge_person))
|
||||
.route("/{person_id}/thumbnail", put(set_person_thumbnail))
|
||||
.route("/cluster", post(cluster_faces))
|
||||
.route("/{person_id}/media", get(list_media_for_person))
|
||||
}
|
||||
|
||||
pub fn face_routes() -> Router<AppState> {
|
||||
@@ -176,3 +180,29 @@ async fn set_person_thumbnail(
|
||||
.await?;
|
||||
Ok(StatusCode::OK)
|
||||
}
|
||||
|
||||
async fn cluster_faces(
|
||||
State(state): State<AppState>,
|
||||
UserId(user_id): UserId,
|
||||
) -> Result<StatusCode, ApiError> {
|
||||
state
|
||||
.person_service
|
||||
.cluster_unassigned_faces(user_id)
|
||||
.await?;
|
||||
Ok(StatusCode::OK)
|
||||
}
|
||||
|
||||
async fn list_media_for_person(
|
||||
State(state): State<AppState>,
|
||||
UserId(user_id): UserId,
|
||||
Path(person_id): Path<Uuid>,
|
||||
ApiListMediaOptions(options): ApiListMediaOptions,
|
||||
) -> Result<Json<PaginatedResponse<MediaResponse>>, ApiError> {
|
||||
let core_paginated_result = state
|
||||
.person_service
|
||||
.list_media_for_person(person_id, user_id, options)
|
||||
.await?;
|
||||
|
||||
let api_response = map_paginated_response(core_paginated_result);
|
||||
Ok(Json(api_response))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user