summaryrefslogtreecommitdiff
path: root/src/routes/artist.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/artist.rs')
-rw-r--r--src/routes/artist.rs66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/routes/artist.rs b/src/routes/artist.rs
new file mode 100644
index 0000000..bf18e34
--- /dev/null
+++ b/src/routes/artist.rs
@@ -0,0 +1,66 @@
+use crate::routes::Artist;
+use crate::AppState;
+use actix_web::{get, web, HttpResponse};
+use serde::Deserialize;
+
+#[derive(Deserialize)]
+struct ArtistQueryOptions {
+ id: Option<String>,
+ name: Option<String>,
+}
+
+#[get("/api/artist")]
+pub async fn artist(
+ app_state: web::Data<AppState>,
+ get_args: web::Query<ArtistQueryOptions>,
+) -> HttpResponse {
+ let search_attempt: sqlx::Result<Vec<Artist>>;
+
+ match true {
+ _ if check_if_exists(&get_args.id) => {
+ search_attempt = sqlx::query_as!(
+ Artist,
+ "SELECT name, id
+ FROM artist
+ WHERE 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!(
+ Artist,
+ "SELECT name, id
+ FROM artist
+ WHERE LOWER(name) LIKE LOWER(?)",
+ new_name,
+ )
+ .fetch_all(&app_state.pool)
+ .await;
+ }
+ _ => {
+ search_attempt = sqlx::query_as!(
+ Artist,
+ "SELECT name, id
+ FROM artist
+ ",
+ )
+ .fetch_all(&app_state.pool)
+ .await;
+ }
+ };
+
+ match search_attempt {
+ Ok(artist_list) => HttpResponse::Ok().json(artist_list),
+ Err(e) => HttpResponse::Ok().body(format!("{}", e)),
+ }
+}
+
+fn check_if_exists(value: &Option<String>) -> bool {
+ match value {
+ Some(_) => true,
+ None => false,
+ }
+}