diff options
Diffstat (limited to 'src/routes')
-rw-r--r-- | src/routes/song.rs | 70 |
1 files changed, 63 insertions, 7 deletions
diff --git a/src/routes/song.rs b/src/routes/song.rs index f0630e9..8b28b8d 100644 --- a/src/routes/song.rs +++ b/src/routes/song.rs @@ -7,9 +7,11 @@ use serde::Deserialize; struct SongQueryOptions { id: Option<String>, name: Option<String>, + artist: Option<String>, + album: Option<String>, } -#[get("/song")] +#[get("/api/song")] pub async fn song( app_state: web::Data<AppState>, get_args: web::Query<SongQueryOptions>, @@ -20,25 +22,79 @@ pub async fn song( _ if check_if_exists(&get_args.id) => { search_attempt = sqlx::query_as!( Song, - "SELECT name, lyrics FROM song WHERE id=?", + "SELECT song.name, song.lyrics, song.id, + album.name as album_name, album.id as album_id, + artist.name as artist_name, artist.id as artist_id + FROM song + INNER JOIN album ON song.album_id = album.id + INNER JOIN artist ON album.artist_id = artist.id + WHERE song.id=?", &get_args.id, ) .fetch_all(&app_state.pool) .await; } _ if check_if_exists(&get_args.name) => { + let new_name : String = format!("{}{}{}", "%", &get_args.name.clone().unwrap(), "%"); search_attempt = sqlx::query_as!( Song, - "SELECT name, lyrics FROM song WHERE LOWER(name) LIKE '%' + LOWER(?) + '%'", - &get_args.name, + "SELECT song.name, song.lyrics, song.id, + album.name as album_name, album.id as album_id, + artist.name as artist_name, artist.id as artist_id + FROM song + INNER JOIN album ON song.album_id = album.id + INNER JOIN artist ON album.artist_id = artist.id + WHERE LOWER(song.name) LIKE LOWER(?)", + new_name, + ) + .fetch_all(&app_state.pool) + .await; + } + _ if check_if_exists(&get_args.album) => { + search_attempt = sqlx::query_as!( + Song, + "SELECT song.name, song.lyrics, song.id, + album.name as album_name, album.id as album_id, + artist.name as artist_name, artist.id as artist_id + FROM song + INNER JOIN album ON song.album_id = album.id + INNER JOIN artist ON album.artist_id = artist.id + WHERE song.album_id=? + ", + &get_args.album, + ) + .fetch_all(&app_state.pool) + .await; + } + _ if check_if_exists(&get_args.artist) => { + search_attempt = sqlx::query_as!( + Song, + "SELECT song.name, song.lyrics, song.id, + album.name as album_name, album.id as album_id, + artist.name as artist_name, artist.id as artist_id + FROM song + INNER JOIN album ON song.album_id = album.id + INNER JOIN artist ON album.artist_id = artist.id + WHERE album.artist_id=? + ", + &get_args.artist, ) .fetch_all(&app_state.pool) .await; } _ => { - search_attempt = sqlx::query_as!(Song, "SELECT name, lyrics FROM song",) - .fetch_all(&app_state.pool) - .await; + search_attempt = sqlx::query_as!( + Song, + "SELECT song.name, song.lyrics, song.id, + album.name as album_name, album.id as album_id, + artist.name as artist_name, artist.id as artist_id + FROM song + INNER JOIN album ON song.album_id = album.id + INNER JOIN artist ON album.artist_id = artist.id + ", + ) + .fetch_all(&app_state.pool) + .await; } }; |