From 073149464269b5fcc90e282536c1a946ad474085 Mon Sep 17 00:00:00 2001 From: niliara-edu Date: Sun, 19 Jan 2025 14:17:25 +0100 Subject: add docs + song api routes --- src/routes.rs | 5 ++++ src/routes/song.rs | 70 ++++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 68 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/routes.rs b/src/routes.rs index 6195f32..a219da1 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -4,6 +4,11 @@ pub mod song; #[derive(Serialize)] pub struct Song { + id: Option, name: Option, lyrics: Option, + album_name: Option, + album_id: Option, + artist_name: Option, + artist_id: Option, } 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, name: Option, + artist: Option, + album: Option, } -#[get("/song")] +#[get("/api/song")] pub async fn song( app_state: web::Data, get_args: web::Query, @@ -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; } }; -- cgit v1.2.3