diff options
author | niliara-edu <nil.jimeno@estudiant.fjaverianas.com> | 2025-01-20 22:15:14 +0100 |
---|---|---|
committer | niliara-edu <nil.jimeno@estudiant.fjaverianas.com> | 2025-01-20 22:15:14 +0100 |
commit | 58515ddfecd3701112616c33ad4879dae4b38ffd (patch) | |
tree | 6a3046b9005aa5247f5e077849409acdc62f17ce | |
parent | daa7aea33439a91c4dd14592d1909d78ebe472e2 (diff) |
save before disaster
-rw-r--r-- | src/database.rs | 18 | ||||
-rw-r--r-- | src/main.rs | 7 | ||||
-rw-r--r-- | src/routes/album.rs | 15 | ||||
-rw-r--r-- | src/routes/artist.rs | 31 | ||||
-rw-r--r-- | src/routes/search_results.rs | 38 | ||||
-rw-r--r-- | src/routes/song.rs | 32 |
6 files changed, 93 insertions, 48 deletions
diff --git a/src/database.rs b/src/database.rs index 32b1de7..eff3f0e 100644 --- a/src/database.rs +++ b/src/database.rs @@ -61,7 +61,7 @@ impl DatabaseWrapper { .await; } - pub async fn select_song_by_id(&self, id: &str) -> Result<Vec<Song>, sqlx::Error> { + pub async fn select_song_by_id(&self, id: &str) -> Result<Option<Song>, sqlx::Error> { return sqlx::query_as!( Song, "SELECT song.name, song.lyrics, song.id, @@ -74,7 +74,7 @@ impl DatabaseWrapper { ", id, ) - .fetch_all(&self.db_pool) + .fetch_optional(&self.db_pool) .await; } @@ -143,7 +143,7 @@ impl DatabaseWrapper { .await; } - pub async fn select_album_by_id(&self, id: &str) -> Result<Vec<Album>, sqlx::Error> { + pub async fn select_album_by_id(&self, id: &str) -> Result<Option<Album>, sqlx::Error> { return sqlx::query_as!( Album, "SELECT album.name, album.id, @@ -153,7 +153,7 @@ impl DatabaseWrapper { WHERE album.id=?", id, ) - .fetch_all(&self.db_pool) + .fetch_optional(&self.db_pool) .await; } @@ -200,7 +200,7 @@ impl DatabaseWrapper { .await; } - pub async fn select_artist_by_id(&self, id: &str) -> Result<Vec<Artist>, sqlx::Error> { + pub async fn select_artist_by_id(&self, id: &str) -> Result<Option<Artist>, sqlx::Error> { return sqlx::query_as!( Artist, "SELECT name, id @@ -208,7 +208,7 @@ impl DatabaseWrapper { WHERE id = ?", id, ) - .fetch_all(&self.db_pool) + .fetch_optional(&self.db_pool) .await; } @@ -244,9 +244,9 @@ impl DatabaseWrapper { &self, id: &str, ) -> ( - Result<Vec<Artist>, sqlx::Error>, - Result<Vec<Album>, sqlx::Error>, - Result<Vec<Song>, sqlx::Error>, + Result<Option<Artist>, sqlx::Error>, + Result<Option<Album>, sqlx::Error>, + Result<Option<Song>, sqlx::Error>, ) { return ( self.select_artist_by_id(id).await, diff --git a/src/main.rs b/src/main.rs index 2871fc7..f55a17c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,7 +21,7 @@ async fn main() -> std::io::Result<()> { let db_raw = database::DatabaseWrapper::new() .await - .expect("Something went wrong -- DatabaseWrapper::new()"); + .expect("Something went wrong while creating DatabaseWrapper"); let db = Arc::new(db_raw); let app_state = AppState { database: db }; @@ -29,9 +29,10 @@ async fn main() -> std::io::Result<()> { App::new() .app_data(web::Data::new(app_state.clone())) .route("/", web::get().to(root)) - .service(routes::song::song) + .service(routes::song::get_song) .service(routes::album::album) - .service(routes::artist::artist) + .service(routes::artist::get_artist) + .service(routes::artist::post_artist) .service(routes::search_results::search_results) }) .bind(("127.0.0.1", 8000))? diff --git a/src/routes/album.rs b/src/routes/album.rs index 6f793bd..dbf04f0 100644 --- a/src/routes/album.rs +++ b/src/routes/album.rs @@ -16,11 +16,18 @@ pub async fn album( get_args: web::Query<AlbumQueryOptions>, ) -> HttpResponse { let default: String = String::from(""); + + if get_args.id.is_some() { + let id: &str = get_args.id.as_ref().unwrap_or(&default); + let search_attempt: sqlx::Result<Option<Album>> = + app_state.database.select_album_by_id(id).await; + + return match search_attempt { + Ok(song_list) => HttpResponse::Ok().json(song_list), + Err(e) => HttpResponse::Ok().body(format!("{}", e)), + }; + } let search_attempt: sqlx::Result<Vec<Album>, sqlx::Error> = match true { - _ if get_args.id.is_some() => { - let id: &str = &get_args.id.as_ref().unwrap_or(&default); - app_state.database.select_album_by_id(id).await - } _ if get_args.name.is_some() => { let name: &str = &get_args.name.as_ref().unwrap_or(&default); app_state.database.select_albums_by_name(name).await diff --git a/src/routes/artist.rs b/src/routes/artist.rs index 18272fb..dc481f3 100644 --- a/src/routes/artist.rs +++ b/src/routes/artist.rs @@ -1,6 +1,6 @@ use crate::database::Artist; use crate::AppState; -use actix_web::{get, web, HttpResponse}; +use actix_web::{get, post, web, HttpResponse}; use serde::Deserialize; #[derive(Deserialize)] @@ -10,17 +10,24 @@ struct ArtistQueryOptions { } #[get("/artist")] -pub async fn artist( +pub async fn get_artist( app_state: web::Data<AppState>, get_args: web::Query<ArtistQueryOptions>, ) -> HttpResponse { let default: String = String::from(""); - let search_attempt: sqlx::Result<Vec<Artist>, sqlx::Error> = match true { - _ if get_args.id.is_some() => { - let id: &str = &get_args.id.as_ref().unwrap_or(&default); - app_state.database.select_artist_by_id(id).await - } + if get_args.id.is_some() { + let id: &str = get_args.id.as_ref().unwrap_or(&default); + let search_attempt: sqlx::Result<Option<Artist>> = + app_state.database.select_artist_by_id(id).await; + + return match search_attempt { + Ok(song_list) => HttpResponse::Ok().json(song_list), + Err(e) => HttpResponse::Ok().body(format!("{}", e)), + }; + } + + let search_attempt: sqlx::Result<Vec<Artist>, sqlx::Error> = match true { _ if get_args.name.is_some() => { let name: &str = &get_args.name.as_ref().unwrap_or(&default); app_state.database.select_artists_by_name(name).await @@ -33,3 +40,13 @@ pub async fn artist( Err(e) => HttpResponse::Ok().body(format!("{}", e)), } } + +#[post("/artist")] +pub async fn post_artist( +// app_state: web::Data<AppState>, +) -> HttpResponse { +// if get_args.body.is_some() { +// HttpResponse::Ok().json("{}"); +// } + HttpResponse::Ok().body("bad") +} diff --git a/src/routes/search_results.rs b/src/routes/search_results.rs index 5c9efb8..3056aef 100644 --- a/src/routes/search_results.rs +++ b/src/routes/search_results.rs @@ -14,18 +14,29 @@ pub async fn search_results( app_state: web::Data<AppState>, get_args: web::Query<SearchQueryOptions>, ) -> HttpResponse { + let default: String = String::from(""); + + if get_args.id.is_some() { + let id: &str = get_args.id.as_ref().unwrap_or(&default); + let search_attempt: ( + sqlx::Result<Option<Artist>, sqlx::Error>, + sqlx::Result<Option<Album>, sqlx::Error>, + sqlx::Result<Option<Song>, sqlx::Error>, + ) = { app_state.database.search_results_by_id(id).await }; + + return HttpResponse::Ok().json(( + search_attempt.0.unwrap_or(None), + search_attempt.1.unwrap_or(None), + search_attempt.2.unwrap_or(None), + )); + }; + let search_attempt: ( sqlx::Result<Vec<Artist>, sqlx::Error>, sqlx::Result<Vec<Album>, sqlx::Error>, sqlx::Result<Vec<Song>, sqlx::Error>, ) = match true { - _ if check_if_exists(&get_args.id) => { - app_state - .database - .search_results_by_id(&get_args.id.clone().unwrap()) - .await - } - _ if check_if_exists(&get_args.name) => { + _ if get_args.name.is_some() => { app_state .database .search_results_by_name(&get_args.name.clone().unwrap()) @@ -37,15 +48,8 @@ pub async fn search_results( }; return HttpResponse::Ok().json(( - search_attempt.0.unwrap_or_else(|_| return Vec::new()), - search_attempt.1.unwrap_or_else(|_| return Vec::new()), - search_attempt.2.unwrap_or_else(|_| return Vec::new()), + search_attempt.0.unwrap_or(Vec::new()), + search_attempt.1.unwrap_or(Vec::new()), + search_attempt.2.unwrap_or(Vec::new()), )); } - -fn check_if_exists(value: &Option<String>) -> bool { - match value { - Some(_) => true, - None => false, - } -} diff --git a/src/routes/song.rs b/src/routes/song.rs index 27197dd..97513f6 100644 --- a/src/routes/song.rs +++ b/src/routes/song.rs @@ -12,26 +12,34 @@ struct SongQueryOptions { } #[get("/song")] -pub async fn song( +pub async fn get_song( app_state: web::Data<AppState>, get_args: web::Query<SongQueryOptions>, ) -> HttpResponse { let default: String = String::from(""); + + if get_args.id.is_some() { + let id: &str = get_args.id.as_ref().unwrap_or(&default); + let search_attempt: sqlx::Result<Option<Song>> = + app_state.database.select_song_by_id(id).await; + + return match search_attempt { + Ok(song_list) => HttpResponse::Ok().json(song_list), + Err(e) => HttpResponse::Ok().body(format!("{}", e)), + }; + } + let search_attempt: sqlx::Result<Vec<Song>> = match true { - _ if get_args.id.is_some() => { - let id: &str = &get_args.id.as_ref().unwrap_or(&default); - app_state.database.select_song_by_id(id).await - } _ if get_args.name.is_some() => { - let name: &str = &get_args.name.as_ref().unwrap_or(&default); + let name: &str = get_args.name.as_ref().unwrap_or(&default); app_state.database.select_songs_by_name(name).await } _ if get_args.album.is_some() => { - let album: &str = &get_args.album.as_ref().unwrap_or(&default); + let album: &str = get_args.album.as_ref().unwrap_or(&default); app_state.database.select_songs_by_album(album).await } _ if get_args.artist.is_some() => { - let artist: &str = &get_args.artist.as_ref().unwrap_or(&default); + let artist: &str = get_args.artist.as_ref().unwrap_or(&default); app_state.database.select_songs_by_artist(artist).await } _ => app_state.database.select_songs().await, @@ -42,3 +50,11 @@ pub async fn song( Err(e) => HttpResponse::Ok().body(format!("{}", e)), } } + +// #[post("/song")] +// pub async fn post_song( +// app_state: web::Data<AppState>, +// get_args: web::Query<SongQueryOptions>, +// ) -> HttpResponse { +// HttpResponse::Ok().body("Post carried successfully") +// } |