diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-11 12:43:16 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-11 12:43:16 +0200 |
commit | 29eb56f03ac122bda1b12909592e76d34d79b542 (patch) | |
tree | 1c7d5b87182942e3dc272c207bb976e779d4b7c3 /server/src/routes/userdata.rs | |
parent | bb6ef9611b51c716635297da913008f787293856 (diff) | |
download | jellything-29eb56f03ac122bda1b12909592e76d34d79b542.tar jellything-29eb56f03ac122bda1b12909592e76d34d79b542.tar.bz2 jellything-29eb56f03ac122bda1b12909592e76d34d79b542.tar.zst |
node user ratingings
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, |