From 1bf0ed7e190fdbe3d0e54749a14f770683069be4 Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Wed, 29 Oct 2025 14:36:19 -0400 Subject: [PATCH] tsk-213: Adding song check when queueing songs --- src/callers/queue/song.rs | 48 +++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/callers/queue/song.rs b/src/callers/queue/song.rs index 73c09c7..6c1fbd5 100644 --- a/src/callers/queue/song.rs +++ b/src/callers/queue/song.rs @@ -96,6 +96,21 @@ pub mod response { } } +pub async fn is_song_valid(data: &[u8]) -> Result { + match icarus_meta::detection::song::file_type_from_data(data) { + Ok(file_type) => { + if file_type.file_type == icarus_meta::detection::song::constants::FLAC_TYPE { + Ok(true) + } else { + Ok(false) + } + } + Err(err) => { + Err(err) + } + } +} + pub mod endpoint { use axum::response::IntoResponse; @@ -139,22 +154,35 @@ pub mod endpoint { ); let raw_data: Vec = data.to_vec(); - let queue_repo = repo::song::insert( - &pool, - &raw_data, - &file_name, - &crate::repo::queue::song::status::PENDING.to_string(), - ) - .await - .unwrap(); - results.push(queue_repo); + match super::is_song_valid(&raw_data).await { + Ok(valid) => { + if valid { + let queue_repo = repo::song::insert( + &pool, + &raw_data, + &file_name, + &crate::repo::queue::song::status::PENDING.to_string(), + ) + .await + .unwrap(); + results.push(queue_repo); + } else { + response.message = String::from("Invalid song type"); + return (axum::http::StatusCode::INTERNAL_SERVER_ERROR, axum::Json(response)) + } + } + Err(err) => { + response.message = err.to_string(); + return (axum::http::StatusCode::INTERNAL_SERVER_ERROR, axum::Json(response)); + } + } } response.data = results; response.message = if response.data.is_empty() { String::from("Error") } else { - String::from("Success") + String::from(super::super::super::response::SUCCESSFUL) }; (axum::http::StatusCode::OK, axum::Json(response))