feat: implement add media to album functionality with dialog and API integration
This commit is contained in:
@@ -13,8 +13,8 @@ use crate::{
|
||||
error::ApiError,
|
||||
middleware::auth::UserId,
|
||||
schema::{
|
||||
AddMediaToAlbumRequest, AlbumResponse, CreateAlbumRequest, SetThumbnailRequest,
|
||||
ShareAlbumRequest, UpdateAlbumRequest,
|
||||
AddMediaToAlbumRequest, AlbumResponse, CreateAlbumRequest, MediaResponse,
|
||||
SetThumbnailRequest, ShareAlbumRequest, UpdateAlbumRequest,
|
||||
},
|
||||
state::AppState,
|
||||
};
|
||||
@@ -133,6 +133,21 @@ async fn set_album_thumbnail(
|
||||
Ok(StatusCode::OK)
|
||||
}
|
||||
|
||||
async fn get_media_for_album(
|
||||
State(state): State<AppState>,
|
||||
UserId(user_id): UserId,
|
||||
Path(album_id): Path<Uuid>,
|
||||
) -> Result<Json<Vec<MediaResponse>>, ApiError> {
|
||||
let media_list = state
|
||||
.album_service
|
||||
.get_album_media(album_id, user_id)
|
||||
.await?;
|
||||
|
||||
let response = media_list.into_iter().map(MediaResponse::from).collect();
|
||||
|
||||
Ok(Json(response))
|
||||
}
|
||||
|
||||
pub fn album_routes() -> Router<AppState> {
|
||||
Router::new()
|
||||
.route("/", post(create_album).get(list_user_albums))
|
||||
@@ -143,6 +158,9 @@ pub fn album_routes() -> Router<AppState> {
|
||||
.delete(delete_album),
|
||||
)
|
||||
.route("/{id}/thumbnail", put(set_album_thumbnail))
|
||||
.route("/{id}/media", post(add_media_to_album))
|
||||
.route(
|
||||
"/{id}/media",
|
||||
post(add_media_to_album).get(get_media_for_album),
|
||||
)
|
||||
.route("/{id}/share", post(share_album))
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use chrono::Utc;
|
||||
use libertas_core::{
|
||||
authz::{self, Permission},
|
||||
error::{CoreError, CoreResult},
|
||||
models::{Album, PublicAlbumBundle},
|
||||
models::{Album, Media, PublicAlbumBundle},
|
||||
repositories::{AlbumRepository, AlbumShareRepository},
|
||||
schema::{AddMediaToAlbumData, CreateAlbumData, ShareAlbumData, UpdateAlbumData},
|
||||
services::{AlbumService, AuthorizationService},
|
||||
@@ -188,4 +188,14 @@ impl AlbumService for AlbumServiceImpl {
|
||||
.set_thumbnail_media_id(album_id, media_id)
|
||||
.await
|
||||
}
|
||||
|
||||
async fn get_album_media(&self, album_id: Uuid, user_id: Uuid) -> CoreResult<Vec<Media>> {
|
||||
self.auth_service
|
||||
.check_permission(Some(user_id), Permission::ViewAlbum(album_id))
|
||||
.await?;
|
||||
|
||||
let media = self.album_repo.list_media_by_album_id(album_id).await?;
|
||||
|
||||
Ok(media)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user