feat: Add thumbnail management for albums and people, implement face embedding functionality

This commit is contained in:
2025-11-15 22:50:53 +01:00
parent 98f56e4f1e
commit 0f3e098d6d
28 changed files with 560 additions and 26 deletions

View File

@@ -2,12 +2,22 @@ use axum::{
Json, Router,
extract::{Path, State},
http::StatusCode,
routing::{get, post},
routing::{get, post, put},
};
use libertas_core::schema::{
AddMediaToAlbumData, CreateAlbumData, ShareAlbumData, UpdateAlbumData,
};
use libertas_core::schema::{AddMediaToAlbumData, CreateAlbumData, ShareAlbumData, UpdateAlbumData};
use uuid::Uuid;
use crate::{error::ApiError, middleware::auth::UserId, schema::{AddMediaToAlbumRequest, AlbumResponse, CreateAlbumRequest, ShareAlbumRequest, UpdateAlbumRequest}, state::AppState};
use crate::{
error::ApiError,
middleware::auth::UserId,
schema::{
AddMediaToAlbumRequest, AlbumResponse, CreateAlbumRequest, SetThumbnailRequest,
ShareAlbumRequest, UpdateAlbumRequest,
},
state::AppState,
};
async fn create_album(
State(state): State<AppState>,
@@ -110,6 +120,19 @@ async fn delete_album(
Ok(StatusCode::NO_CONTENT)
}
async fn set_album_thumbnail(
State(state): State<AppState>,
UserId(user_id): UserId,
Path(album_id): Path<Uuid>,
Json(payload): Json<SetThumbnailRequest>,
) -> Result<StatusCode, ApiError> {
state
.album_service
.set_album_thumbnail(album_id, payload.media_id, user_id)
.await?;
Ok(StatusCode::OK)
}
pub fn album_routes() -> Router<AppState> {
Router::new()
.route("/", post(create_album).get(list_user_albums))
@@ -119,6 +142,7 @@ pub fn album_routes() -> Router<AppState> {
.put(update_album)
.delete(delete_album),
)
.route("/{id}/thumbnail", put(set_album_thumbnail))
.route("/{id}/media", post(add_media_to_album))
.route("/{id}/share", post(share_album))
}

View File

@@ -13,7 +13,7 @@ use crate::{
middleware::auth::UserId,
schema::{
AssignFaceRequest, CreatePersonRequest, FaceRegionResponse, MergePersonRequest,
PersonResponse, SharePersonRequest, UpdatePersonRequest,
PersonResponse, SetPersonThumbnailRequest, SharePersonRequest, UpdatePersonRequest,
},
state::AppState,
};
@@ -30,6 +30,7 @@ pub fn people_routes() -> Router<AppState> {
post(share_person).delete(unshare_person),
)
.route("/{person_id}/merge", post(merge_person))
.route("/{person_id}/thumbnail", put(set_person_thumbnail))
}
pub fn face_routes() -> Router<AppState> {
@@ -162,3 +163,16 @@ async fn merge_person(
.await?;
Ok(StatusCode::NO_CONTENT)
}
async fn set_person_thumbnail(
State(state): State<AppState>,
UserId(user_id): UserId,
Path(person_id): Path<Uuid>,
Json(payload): Json<SetPersonThumbnailRequest>,
) -> Result<StatusCode, ApiError> {
state
.person_service
.set_person_thumbnail(person_id, payload.face_region_id, user_id)
.await?;
Ok(StatusCode::OK)
}