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("/searchResults")] pub async fn search_results( app_state: web::Data, get_args: web::Query, ) -> HttpResponse { let search_attempt: ( sqlx::Result, sqlx::Error>, sqlx::Result, sqlx::Error>, sqlx::Result, 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) -> bool { match value { Some(_) => true, None => false, } }