feat: add functionality to remove media from album, including API integration and UI context menu
This commit is contained in:
@@ -5,7 +5,8 @@ use axum::{
|
||||
routing::{get, post, put},
|
||||
};
|
||||
use libertas_core::schema::{
|
||||
AddMediaToAlbumData, CreateAlbumData, ShareAlbumData, UpdateAlbumData,
|
||||
AddMediaToAlbumData, CreateAlbumData, RemoveMediaFromAlbumRequest, ShareAlbumData,
|
||||
UpdateAlbumData,
|
||||
};
|
||||
use uuid::Uuid;
|
||||
|
||||
@@ -148,6 +149,19 @@ async fn get_media_for_album(
|
||||
Ok(Json(response))
|
||||
}
|
||||
|
||||
async fn remove_media_from_album(
|
||||
State(state): State<AppState>,
|
||||
UserId(user_id): UserId,
|
||||
Path(album_id): Path<Uuid>,
|
||||
Json(payload): Json<RemoveMediaFromAlbumRequest>,
|
||||
) -> Result<StatusCode, ApiError> {
|
||||
state
|
||||
.album_service
|
||||
.remove_media_from_album(album_id, &payload.media_ids, user_id)
|
||||
.await?;
|
||||
Ok(StatusCode::NO_CONTENT)
|
||||
}
|
||||
|
||||
pub fn album_routes() -> Router<AppState> {
|
||||
Router::new()
|
||||
.route("/", post(create_album).get(list_user_albums))
|
||||
@@ -160,7 +174,9 @@ pub fn album_routes() -> Router<AppState> {
|
||||
.route("/{id}/thumbnail", put(set_album_thumbnail))
|
||||
.route(
|
||||
"/{id}/media",
|
||||
post(add_media_to_album).get(get_media_for_album),
|
||||
post(add_media_to_album)
|
||||
.get(get_media_for_album)
|
||||
.delete(remove_media_from_album),
|
||||
)
|
||||
.route("/{id}/share", post(share_album))
|
||||
}
|
||||
|
||||
@@ -198,4 +198,19 @@ impl AlbumService for AlbumServiceImpl {
|
||||
|
||||
Ok(media)
|
||||
}
|
||||
|
||||
async fn remove_media_from_album(
|
||||
&self,
|
||||
album_id: Uuid,
|
||||
media_ids: &[Uuid],
|
||||
user_id: Uuid,
|
||||
) -> CoreResult<()> {
|
||||
self.auth_service
|
||||
.check_permission(Some(user_id), Permission::EditAlbum(album_id))
|
||||
.await?;
|
||||
|
||||
self.album_repo
|
||||
.remove_media_from_album(album_id, media_ids)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user