feat: Add thumbnail management for albums and people, implement face embedding functionality
This commit is contained in:
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user