From 8708271d9db0e412069c7cd58842220bf808679c Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Mon, 1 Jan 2024 12:19:04 -0800 Subject: [PATCH] adds reactive status to search results --- src/lib.rs | 5 +-- src/watches/handlers.rs | 55 ++++++++++++++++++++++++++---- src/watches/mod.rs | 4 +-- templates/search_watches_page.html | 1 + templates/watch-search-result.html | 11 +++--- 5 files changed, 59 insertions(+), 17 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 2fe9184..8352bf1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -40,8 +40,8 @@ pub async fn app(db_pool: sqlx::SqlitePool) -> IntoMakeService { use signup::{get_create_user, get_signup_success, post_create_user}; use tower_http::services::ServeDir; use watches::handlers::{ - get_add_new_watch, get_search_watch, get_watch, get_watches, post_add_new_watch, - post_add_watch_quest, + get_add_new_watch, get_search_watch, get_watch, get_watch_status, get_watches, + post_add_new_watch, post_add_watch_quest, }; let auth_layer = { @@ -67,6 +67,7 @@ pub async fn app(db_pool: sqlx::SqlitePool) -> IntoMakeService { .route("/watches", get(get_watches)) .route("/watch", get(get_watch)) .route("/watch/:id", get(get_watch)) + .route("/watch/status/:id", get(get_watch_status)) .route("/search", get(get_search_watch)) .route("/add", get(get_add_new_watch).post(post_add_new_watch)) .route( diff --git a/src/watches/handlers.rs b/src/watches/handlers.rs index d0a046f..3518bfa 100644 --- a/src/watches/handlers.rs +++ b/src/watches/handlers.rs @@ -78,6 +78,11 @@ pub struct SearchQuery { pub year: Option, } +#[derive(Debug, Default, Clone, Deserialize, PartialEq, Eq)] +pub struct StatusQuery { + pub public: bool, +} + // kinda the main form? #[derive(Debug, Default, Deserialize, PartialEq, Eq)] pub struct PostAddNewWatch { @@ -129,8 +134,8 @@ pub async fn post_add_new_watch( let watch_id = add_new_watch_impl(&pool, &watch).await?; let quest = WatchQuest { user: user.id, - is_public: !form.private, - already_watched: form.watched_already, + public: !form.private, + watched: form.watched_already, watch: watch_id, }; add_watch_quest_impl(&pool, &quest) @@ -172,8 +177,8 @@ pub async fn post_add_watch_quest( let quest = WatchQuest { user: user.id, watch: Julid::from_string(&form.watch).unwrap(), - is_public: form.public, - already_watched: form.watched_already, + public: form.public, + watched: form.watched_already, }; add_watch_quest_impl(&pool, &quest) .await @@ -193,8 +198,8 @@ pub async fn add_watch_quest_impl(pool: &SqlitePool, quest: &WatchQuest) -> Resu query(ADD_WATCH_QUEST_QUERY) .bind(quest.user) .bind(quest.watch) - .bind(quest.is_public) - .bind(quest.already_watched) + .bind(quest.public) + .bind(quest.watched) .execute(pool) .await .map_err(|err| { @@ -275,3 +280,41 @@ pub async fn get_search_watch( search: search_string, } } + +pub async fn get_watch_status( + auth: AuthSession, + State(pool): State, + query: Query, + Path(watch): Path, +) -> Result { + if let Some(user) = auth.user { + let watch = Julid::from_string(&watch).unwrap(); + let public = query.public; + let quest: Option = + query_as("select * from watch_quests where user = ? and watch = ? and public = ?") + .bind(user.id) + .bind(watch) + .bind(public) + .fetch_optional(&pool) + .await + .map_err(|e| { + tracing::error!("Got error from checking watch status: {e:?}"); + })?; + match quest { + Some(_) => Ok("✓".into_response()), + _ => Ok(format!( + "
+ + + + +
+" + ) + .into_response()), + } + } else { + Ok("Login to add".into_response()) + } +} diff --git a/src/watches/mod.rs b/src/watches/mod.rs index 4010bba..ffad2af 100644 --- a/src/watches/mod.rs +++ b/src/watches/mod.rs @@ -98,8 +98,8 @@ impl Watch { pub struct WatchQuest { pub user: Julid, pub watch: Julid, - pub is_public: bool, - pub already_watched: bool, + pub public: bool, + pub watched: bool, } #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] diff --git a/templates/search_watches_page.html b/templates/search_watches_page.html index e0db52c..6493fcf 100644 --- a/templates/search_watches_page.html +++ b/templates/search_watches_page.html @@ -13,6 +13,7 @@ Title Type Year + Public watchlist? diff --git a/templates/watch-search-result.html b/templates/watch-search-result.html index 4af5e11..1ffeca4 100644 --- a/templates/watch-search-result.html +++ b/templates/watch-search-result.html @@ -3,12 +3,9 @@ {{watch.kind}} {% call m::get_or_default(watch.year(), "when??") -%} -
- - - - -
+ + wanna watch? +