use crate::database::{Album, Artist, Song}; use crate::AppState; use actix_web::{get, web, HttpResponse}; use serde::Deserialize; #[derive(Deserialize)] struct SearchQueryOptions { id: Option, name: Option, } #[get("/search-results")] pub async fn search_results( app_state: web::Data, get_args: web::Query, ) -> 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, sqlx::Error>, sqlx::Result, sqlx::Error>, sqlx::Result, 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, sqlx::Error>, sqlx::Result, sqlx::Error>, sqlx::Result, 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()), )); }