diff options
author | niliara-edu <nil.jimeno@estudiant.fjaverianas.com> | 2025-01-19 14:17:25 +0100 |
---|---|---|
committer | niliara-edu <nil.jimeno@estudiant.fjaverianas.com> | 2025-01-19 14:17:25 +0100 |
commit | 073149464269b5fcc90e282536c1a946ad474085 (patch) | |
tree | a497ad92280f4e00cfbea909fa3a2de3bc8554f4 /src/routes/song.rs | |
parent | 5e875ca22341821a9897092b7b9e656a7405ef32 (diff) |
add docs + song api routes
Diffstat (limited to 'src/routes/song.rs')
-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; } }; |