From d18de3e084bac0e56e4a6ed61649aa5ef058b0f9 Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Thu, 4 Jan 2024 22:23:19 -0800 Subject: [PATCH] make searches better --- src/watches/handlers.rs | 45 +++++++++++++++------------------------- src/watches/templates.rs | 1 - 2 files changed, 17 insertions(+), 29 deletions(-) diff --git a/src/watches/handlers.rs b/src/watches/handlers.rs index 8dfad91..b265ed0 100644 --- a/src/watches/handlers.rs +++ b/src/watches/handlers.rs @@ -23,17 +23,13 @@ const GET_QUEST_QUERY: &str = "select * from watch_quests where user = ? and wat const GET_WATCH_QUERY: &str = "select * from watches where id = $1"; +const DEFAULT_WATCHES_QUERY: &str = + "select * from (select * from watches order by random() limit 50) order by release_date asc"; + const ADD_WATCH_QUERY: &str = "insert into watches (title, kind, release_date, metadata_url, added_by, length) values ($1, $2, $3, $4, $5, $6) returning id"; const ADD_WATCH_QUEST_QUERY: &str = "insert into watch_quests (user, watch, public, watched) values ($1, $2, $3, $4)"; -const EMPTY_SEARCH_QUERY_STRUCT: SearchQuery = SearchQuery { - title: None, - kind: None, - year: None, - search: None, -}; - const CHECKMARK: &str = "✓"; //-************************************************************************ @@ -249,33 +245,26 @@ pub async fn get_search_watch( search: Query, ) -> impl IntoResponse { let user = auth.user; + let search_query = search.0; - let (search_string, qstring) = if search.0 != EMPTY_SEARCH_QUERY_STRUCT { - let s = search.0; - let q = if let Some(title) = &s.title { - title - } else if let Some(search) = &s.search { - search - } else { - "" - }; - (format!("{s:?}"), format!("%{}%", q.trim())) + let query = if search_query == SearchQuery::default() { + query_as(DEFAULT_WATCHES_QUERY) } else { - ("".to_string(), "%".to_string()) + if let Some(title) = search_query.title { + let q = format!("%{title}%"); + query_as("select * from watches where title like ?").bind(q) + } else if let Some(search) = search_query.search { + let q = format!("%{search}"); + query_as("select * from watches where title like ?").bind(q) + } else { + query_as(DEFAULT_WATCHES_QUERY) + } }; // until tantivy search - let watches: Vec = query_as("select * from watches where title like ?") - .bind(&qstring) - .fetch_all(&pool) - .await - .unwrap(); + let watches: Vec = query.fetch_all(&pool).await.unwrap(); - SearchWatchesPage { - watches, - user, - search: search_string, - } + SearchWatchesPage { watches, user } } pub async fn get_watch_status( diff --git a/src/watches/templates.rs b/src/watches/templates.rs index 15529ce..89159d8 100644 --- a/src/watches/templates.rs +++ b/src/watches/templates.rs @@ -16,7 +16,6 @@ pub struct MyWatchesPage { pub struct SearchWatchesPage { pub watches: Vec, pub user: Option, - pub search: String, } #[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser)]