summaryrefslogtreecommitdiff
path: root/src/routes/album.rs
diff options
context:
space:
mode:
authorniliara-edu <nil.jimeno@estudiant.fjaverianas.com>2025-01-19 14:58:26 +0100
committerniliara-edu <nil.jimeno@estudiant.fjaverianas.com>2025-01-19 14:58:26 +0100
commit95b944b819d7a1320d3083929177676f93d4a3e3 (patch)
tree824e3baea0bf1f386a48ca3da587fbb334101e16 /src/routes/album.rs
parent073149464269b5fcc90e282536c1a946ad474085 (diff)
add album and artist routes
Diffstat (limited to 'src/routes/album.rs')
-rw-r--r--src/routes/album.rs87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/routes/album.rs b/src/routes/album.rs
new file mode 100644
index 0000000..1948339
--- /dev/null
+++ b/src/routes/album.rs
@@ -0,0 +1,87 @@
+use crate::routes::Album;
+use crate::AppState;
+use actix_web::{get, web, HttpResponse};
+use serde::Deserialize;
+
+#[derive(Deserialize)]
+struct AlbumQueryOptions {
+ id: Option<String>,
+ name: Option<String>,
+ artist: Option<String>,
+}
+
+#[get("/api/album")]
+pub async fn album(
+ app_state: web::Data<AppState>,
+ get_args: web::Query<AlbumQueryOptions>,
+) -> HttpResponse {
+ let search_attempt: sqlx::Result<Vec<Album>>;
+
+ match true {
+ _ if check_if_exists(&get_args.id) => {
+ search_attempt = sqlx::query_as!(
+ Album,
+ "SELECT album.name, album.id,
+ artist.name as artist_name, artist.id as artist_id
+ FROM album
+ INNER JOIN artist ON album.artist_id = artist.id
+ WHERE album.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!(
+ Album,
+ "SELECT album.name, album.id,
+ artist.name as artist_name, artist.id as artist_id
+ FROM album
+ INNER JOIN artist ON album.artist_id = artist.id
+ WHERE LOWER(album.name) LIKE LOWER(?)",
+ new_name,
+ )
+ .fetch_all(&app_state.pool)
+ .await;
+ }
+ _ if check_if_exists(&get_args.artist) => {
+ search_attempt = sqlx::query_as!(
+ Album,
+ "SELECT album.name, album.id,
+ artist.name as artist_name, artist.id as artist_id
+ FROM album
+ 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!(
+ Album,
+ "SELECT album.name, album.id,
+ artist.name as artist_name, artist.id as artist_id
+ FROM album
+ INNER JOIN artist ON album.artist_id = artist.id
+ ",
+ )
+ .fetch_all(&app_state.pool)
+ .await;
+ }
+ };
+
+ match search_attempt {
+ Ok(album_list) => HttpResponse::Ok().json(album_list),
+ Err(e) => HttpResponse::Ok().body(format!("{}", e)),
+ }
+}
+
+fn check_if_exists(value: &Option<String>) -> bool {
+ match value {
+ Some(_) => true,
+ None => false,
+ }
+}