From 29eb56f03ac122bda1b12909592e76d34d79b542 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 11 Jun 2024 12:43:16 +0200 Subject: node user ratingings --- server/src/routes/userdata.rs | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) (limited to 'server/src/routes/userdata.rs') diff --git a/server/src/routes/userdata.rs b/server/src/routes/userdata.rs index 68fa384..22e20b7 100644 --- a/server/src/routes/userdata.rs +++ b/server/src/routes/userdata.rs @@ -12,7 +12,8 @@ use jellybase::{ }; use jellycommon::user::{NodeUserData, WatchedState}; use rocket::{ - get, post, response::Redirect, serde::json::Json, FromFormField, State, UriDisplayQuery, + form::Form, get, post, response::Redirect, serde::json::Json, FromForm, FromFormField, State, + UriDisplayQuery, }; #[derive(Debug, FromFormField, UriDisplayQuery)] @@ -33,7 +34,7 @@ pub fn r_node_userdata( } #[post("/n//watched?")] -pub async fn r_player_watched( +pub async fn r_node_userdata_watched( session: Session, db: &State, id: &str, @@ -65,8 +66,43 @@ pub async fn r_player_watched( Ok(Redirect::found(rocket::uri!(r_library_node(id)))) } +#[derive(FromForm)] +pub struct UpdateRating { + #[field(validate = range(-10..=10))] + rating: i32, +} + +#[post("/n//update_rating", data = "
")] +pub async fn r_node_userdata_rating( + session: Session, + db: &State, + id: &str, + form: Form, +) -> MyResult { + T_NODE + .get(db, id)? + .only_if_permitted(&session.user.permissions) + .ok_or(anyhow!("node does not exist"))?; + + let txn = db.begin_write()?; + let mut user_nodes = txn.open_table(T_USER_NODE)?; + + let mut udata = user_nodes + .get((session.user.name.as_str(), id))? + .map(|x| x.value().0) + .unwrap_or_default(); + + udata.rating = form.rating; + + user_nodes.insert((session.user.name.as_str(), id), Ser(udata))?; + drop(user_nodes); + txn.commit()?; + + Ok(Redirect::found(rocket::uri!(r_library_node(id)))) +} + #[post("/n//progress?")] -pub async fn r_player_progress( +pub async fn r_node_userdata_progress( session: Session, db: &State, id: &str, -- cgit v1.2.3-70-g09d2