From af1af57a7e5b76254d9f3ffaec286fab99795f3b Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Sun, 19 Oct 2025 19:44:30 -0400 Subject: [PATCH] icarus_models related changes --- src/callers/coverart.rs | 44 +++++++++++++++++++++++++---------------- src/callers/song.rs | 36 ++++++++++++++++++++++----------- 2 files changed, 51 insertions(+), 29 deletions(-) diff --git a/src/callers/coverart.rs b/src/callers/coverart.rs index 9ab8156..c2835ef 100644 --- a/src/callers/coverart.rs +++ b/src/callers/coverart.rs @@ -325,11 +325,12 @@ pub mod cov_db { ) -> Result { let result = sqlx::query( r#" - INSERT INTO "coverart" (title, path, song_id) VALUES($1, $2, $3) RETURNING id; + INSERT INTO "coverart" (title, directory, filename, song_id) VALUES($1, $2, $3, $4) RETURNING id; "#, ) .bind(&coverart.title) - .bind(&coverart.path) + .bind(&coverart.directory) + .bind(&coverart.filename) .bind(song_id) .fetch_one(pool) .await @@ -355,7 +356,7 @@ pub mod cov_db { ) -> Result { let result = sqlx::query( r#" - SELECT id, title, path, song_id FROM "coverart" WHERE id = $1; + SELECT id, title, directory, filename, song_id FROM "coverart" WHERE id = $1; "#, ) .bind(id) @@ -375,15 +376,19 @@ pub mod cov_db { .try_get("title") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - path: row - .try_get("path") + directory: row + .try_get("directory") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), + filename: row + .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - data: Vec::new(), song_id: row .try_get("song_id") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), + ..Default::default() }), Err(_) => Err(sqlx::Error::RowNotFound), } @@ -395,7 +400,7 @@ pub mod cov_db { ) -> Result { let result = sqlx::query( r#" - SELECT id, title, path, song_id FROM "coverart" WHERE song_id = $1; + SELECT id, title, directory, filename, song_id FROM "coverart" WHERE song_id = $1; "#, ) .bind(song_id) @@ -415,8 +420,12 @@ pub mod cov_db { .try_get("title") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - path: row - .try_get("path") + directory: row + .try_get("directory") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), + filename: row + .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), data: Vec::new(), @@ -437,7 +446,7 @@ pub mod cov_db { r#" DELETE FROM "coverart" WHERE id = $1 - RETURNING id, title, path, song_id + RETURNING id, title, directory, filename, song_id "#, ) .bind(id) @@ -457,8 +466,12 @@ pub mod cov_db { .try_get("title") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - path: row - .try_get("path") + directory: row + .try_get("directory") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), + filename: row + .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), song_id: row @@ -701,14 +714,11 @@ pub mod endpoint { match crate::callers::song::song_db::get_song(&pool, &song_id).await { Ok(song) => { let directory = icarus_envy::environment::get_root_directory().await.value; - let dir = std::path::Path::new(&directory); - // TODO: Make this random and the file extension should not be hard coded let filename = format!("{}-coverart.jpeg", &song.filename[..8]); - let save_path = dir.join(&filename); - let path = String::from(save_path.to_str().unwrap()); + let mut coverart = - icarus_models::coverart::init::init_coverart_only_path(path); + icarus_models::coverart::init::init_coverart_dir_and_filename(&directory, &filename); coverart.title = song.album.clone(); coverart.data = data; diff --git a/src/callers/song.rs b/src/callers/song.rs index b6f6e3c..e72eb99 100644 --- a/src/callers/song.rs +++ b/src/callers/song.rs @@ -82,10 +82,11 @@ pub mod request { audio_type: self.audio_type.clone(), user_id: self.user_id, // TODO: Change the type of this in icarus_models lib - date_created: String::new(), - filename: String::new(), - data: Vec::new(), - directory: String::new(), + // date_created: self.date_created, + // filename: String::new(), + // data: Vec::new(), + // directory: String::new(), + ..Default::default() } } } @@ -224,7 +225,7 @@ pub mod song_db { pub async fn insert( pool: &sqlx::PgPool, song: &icarus_models::song::Song, - ) -> Result<(String, uuid::Uuid), sqlx::Error> { + ) -> Result<(time::OffsetDateTime, uuid::Uuid), sqlx::Error> { let result = sqlx::query( r#" INSERT INTO "song" (title, artist, album_artist, album, genre, year, track, disc, track_count, disc_count, duration, audio_type, filename, directory, user_id) @@ -262,7 +263,7 @@ pub mod song_db { .try_get("date_created") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(); - let date_created = date_created_time.to_string(); + let date_created = date_created_time; Ok((date_created, id)) } @@ -354,7 +355,7 @@ pub mod song_db { .try_get("directory") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - date_created: date_created_time.to_string(), + date_created: Some(date_created_time), user_id: row .try_get("user_id") .map_err(|_e| sqlx::Error::RowNotFound) @@ -451,7 +452,7 @@ pub mod song_db { .try_get("directory") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - date_created: date_created_time.to_string(), + date_created: Some(date_created_time), user_id: row .try_get("user_id") .map_err(|_e| sqlx::Error::RowNotFound) @@ -555,7 +556,7 @@ pub mod song_db { .try_get("directory") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - date_created: date_created_time.to_string(), + date_created: Some(date_created_time), user_id: row .try_get("user_id") .map_err(|_e| sqlx::Error::RowNotFound) @@ -1221,7 +1222,7 @@ pub mod endpoint { Ok(_) => match super::song_db::insert(&pool, &song).await { Ok((date_created, id)) => { song.id = id; - song.date_created = date_created; + song.date_created = Some(date_created); response.message = String::from("Successful"); response.data.push(song); @@ -1495,7 +1496,18 @@ pub mod endpoint { .await { Ok(coverart) => { - let coverart_path = std::path::Path::new(&coverart.path); + // let coverart_path = std::path::Path::new(&coverart.path); + let coverart_path_str = match coverart.get_path() { + Ok(path) => { + path + } + Err(err) => { + response.message = err.to_string(); + return (axum::http::StatusCode::INTERNAL_SERVER_ERROR, axum::Json(response)); + } + }; + let coverart_path = std::path::Path::new(&coverart_path_str); + if coverart_path.exists() { match song.song_path() { Ok(song_path) => { @@ -1510,7 +1522,7 @@ pub mod endpoint { Ok(deleted_coverart) => { match std::fs::remove_file(song_path) { Ok(_) => match std::fs::remove_file( - &coverart.path, + &coverart_path ) { Ok(_) => { response.message = String::from(super::super::response::SUCCESSFUL);