feat: implement album sharing functionality with permissions management
This commit is contained in:
@@ -3,7 +3,10 @@ use axum::{
|
||||
extract::{Path, State},
|
||||
http::StatusCode,
|
||||
};
|
||||
use libertas_core::schema::{AddMediaToAlbumData, CreateAlbumData};
|
||||
use libertas_core::{
|
||||
models::AlbumPermission,
|
||||
schema::{AddMediaToAlbumData, CreateAlbumData, ShareAlbumData},
|
||||
};
|
||||
use serde::Deserialize;
|
||||
use uuid::Uuid;
|
||||
|
||||
@@ -57,8 +60,32 @@ async fn add_media_to_album(
|
||||
Ok(StatusCode::OK)
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct ShareAlbumRequest {
|
||||
target_user_id: Uuid,
|
||||
permission: AlbumPermission,
|
||||
}
|
||||
|
||||
async fn share_album(
|
||||
State(state): State<AppState>,
|
||||
UserId(owner_id): UserId, // The person sharing must be authenticated
|
||||
Path(album_id): Path<Uuid>,
|
||||
Json(payload): Json<ShareAlbumRequest>,
|
||||
) -> Result<StatusCode, ApiError> {
|
||||
let data = ShareAlbumData {
|
||||
album_id,
|
||||
target_user_id: payload.target_user_id,
|
||||
permission: payload.permission,
|
||||
};
|
||||
|
||||
state.album_service.share_album(data, owner_id).await?;
|
||||
|
||||
Ok(StatusCode::OK)
|
||||
}
|
||||
|
||||
pub fn album_routes() -> Router<AppState> {
|
||||
Router::new()
|
||||
.route("/", axum::routing::post(create_album))
|
||||
.route("/{album_id}/media", axum::routing::post(add_media_to_album))
|
||||
.route("/{album_id}/share", axum::routing::post(share_album))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user