feat: implement album sharing functionality with permissions management

This commit is contained in:
2025-11-02 17:39:11 +01:00
parent f49d9179f5
commit a36b59a5fb
11 changed files with 263 additions and 31 deletions

View File

@@ -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))
}