diff options
Diffstat (limited to 'server/src/routes/userdata.rs')
-rw-r--r-- | server/src/routes/userdata.rs | 42 |
1 files changed, 39 insertions, 3 deletions
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/<id>/watched?<state>")] -pub async fn r_player_watched( +pub async fn r_node_userdata_watched( session: Session, db: &State<DataAcid>, 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/<id>/update_rating", data = "<form>")] +pub async fn r_node_userdata_rating( + session: Session, + db: &State<DataAcid>, + id: &str, + form: Form<UpdateRating>, +) -> MyResult<Redirect> { + 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/<id>/progress?<t>")] -pub async fn r_player_progress( +pub async fn r_node_userdata_progress( session: Session, db: &State<DataAcid>, id: &str, |