summaryrefslogtreecommitdiff
path: root/src/routes/song.rs
diff options
context:
space:
mode:
authorniliara-edu <nil.jimeno@estudiant.fjaverianas.com>2025-01-19 14:17:25 +0100
committerniliara-edu <nil.jimeno@estudiant.fjaverianas.com>2025-01-19 14:17:25 +0100
commit073149464269b5fcc90e282536c1a946ad474085 (patch)
treea497ad92280f4e00cfbea909fa3a2de3bc8554f4 /src/routes/song.rs
parent5e875ca22341821a9897092b7b9e656a7405ef32 (diff)
add docs + song api routes
Diffstat (limited to 'src/routes/song.rs')
-rw-r--r--src/routes/song.rs70
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;
}
};