summaryrefslogtreecommitdiff
path: root/src/routes
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/search_results.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/routes/search_results.rs b/src/routes/search_results.rs
new file mode 100644
index 0000000..03bd079
--- /dev/null
+++ b/src/routes/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("/searchResults")]
+pub async fn search_results(
+ app_state: web::Data<AppState>,
+ get_args: web::Query<SearchQueryOptions>,
+) -> HttpResponse {
+ let search_attempt: (
+ sqlx::Result<Vec<Artist>, sqlx::Error>,
+ sqlx::Result<Vec<Album>, sqlx::Error>,
+ sqlx::Result<Vec<Song>, sqlx::Error>,
+ ) = match true {
+ _ if check_if_exists(&get_args.id) => {
+ app_state
+ .database
+ .search_results_by_id(&get_args.id.clone().unwrap())
+ .await
+ }
+ _ if check_if_exists(&get_args.name) => {
+ 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_else(|_| return Vec::new()),
+ search_attempt.1.unwrap_or_else(|_| return Vec::new()),
+ search_attempt.2.unwrap_or_else(|_| return Vec::new())
+ ))
+}
+
+fn check_if_exists(value: &Option<String>) -> bool {
+ match value {
+ Some(_) => true,
+ None => false,
+ }
+}