feat: implement media listing with sorting and filtering options
This commit is contained in:
@@ -7,23 +7,14 @@ use axum::{
|
||||
};
|
||||
use futures::TryStreamExt;
|
||||
use libertas_core::{error::CoreError, models::Media, schema::UploadMediaData};
|
||||
use serde::Serialize;
|
||||
use std::{io, path::PathBuf};
|
||||
|
||||
use tower::ServiceExt;
|
||||
use tower_http::services::ServeFile;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::{error::ApiError, middleware::auth::UserId, state::AppState};
|
||||
use crate::{error::ApiError, extractors::query_options::ApiListMediaOptions, middleware::auth::UserId, schema::MediaResponse, state::AppState};
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct MediaResponse {
|
||||
id: uuid::Uuid,
|
||||
storage_path: String,
|
||||
original_filename: String,
|
||||
mime_type: String,
|
||||
hash: String,
|
||||
}
|
||||
|
||||
impl From<Media> for MediaResponse {
|
||||
fn from(media: Media) -> Self {
|
||||
@@ -39,7 +30,7 @@ impl From<Media> for MediaResponse {
|
||||
|
||||
pub fn media_routes(max_upload_size: usize) -> Router<AppState> {
|
||||
Router::new()
|
||||
.route("/", post(upload_media))
|
||||
.route("/", post(upload_media).get(list_user_media))
|
||||
.route("/{id}", get(get_media_details).delete(delete_media))
|
||||
.route("/{id}/file", get(get_media_file))
|
||||
.layer(DefaultBodyLimit::max(max_upload_size))
|
||||
@@ -123,3 +114,17 @@ async fn delete_media(
|
||||
state.media_service.delete_media(id, user_id).await?;
|
||||
Ok(StatusCode::NO_CONTENT)
|
||||
}
|
||||
|
||||
async fn list_user_media(
|
||||
State(state): State<AppState>,
|
||||
UserId(user_id): UserId,
|
||||
ApiListMediaOptions(options): ApiListMediaOptions,
|
||||
) -> Result<Json<Vec<MediaResponse>>, ApiError> {
|
||||
let media_list = state
|
||||
.media_service
|
||||
.list_user_media(user_id, options)
|
||||
.await?;
|
||||
|
||||
let response = media_list.into_iter().map(MediaResponse::from).collect();
|
||||
Ok(Json(response))
|
||||
}
|
||||
Reference in New Issue
Block a user