summaryrefslogtreecommitdiff
path: root/src/api/search_results.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/search_results.rs')
-rw-r--r--src/api/search_results.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/api/search_results.rs b/src/api/search_results.rs
new file mode 100644
index 0000000..6456ff9
--- /dev/null
+++ b/src/api/search_results.rs
@@ -0,0 +1,55 @@
+use crate::database::{Album, Artist, Song};
+use crate::AppState;
+use actix_web::{get, web, HttpResponse};
+use serde::Deserialize;
+
+#[derive(Deserialize)]
+struct SearchQueryOptions {
+ id: Option<String>,
+ name: Option<String>,
+}
+
+#[get("/search-results")]
+pub async fn search_results(
+ app_state: web::Data<AppState>,
+ get_args: web::Query<SearchQueryOptions>,
+) -> HttpResponse {
+ let default: String = String::from("");
+
+ if get_args.id.is_some() {
+ let id: &str = get_args.id.as_ref().unwrap_or(&default);
+ let search_attempt: (
+ sqlx::Result<Option<Artist>, sqlx::Error>,
+ sqlx::Result<Option<Album>, sqlx::Error>,
+ sqlx::Result<Option<Song>, sqlx::Error>,
+ ) = { app_state.database.search_results_by_id(id).await };
+
+ return HttpResponse::Ok().json((
+ search_attempt.0.unwrap_or(None),
+ search_attempt.1.unwrap_or(None),
+ search_attempt.2.unwrap_or(None),
+ ));
+ };
+
+ let search_attempt: (
+ sqlx::Result<Vec<Artist>, sqlx::Error>,
+ sqlx::Result<Vec<Album>, sqlx::Error>,
+ sqlx::Result<Vec<Song>, sqlx::Error>,
+ ) = match true {
+ _ if get_args.name.is_some() => {
+ app_state
+ .database
+ .search_results_by_name(&get_args.name.clone().unwrap())
+ .await
+ }
+ _ => app_state.database.search_results().await, // Err(sqlx::Error::RowNotFound),
+ // Err(sqlx::Error::RowNotFound),
+ // Err(sqlx::Error::RowNotFound),
+ };
+
+ return HttpResponse::Ok().json((
+ search_attempt.0.unwrap_or(Vec::new()),
+ search_attempt.1.unwrap_or(Vec::new()),
+ search_attempt.2.unwrap_or(Vec::new()),
+ ));
+}