aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/userdata.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-11 12:43:16 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-11 12:43:16 +0200
commit29eb56f03ac122bda1b12909592e76d34d79b542 (patch)
tree1c7d5b87182942e3dc272c207bb976e779d4b7c3 /server/src/routes/userdata.rs
parentbb6ef9611b51c716635297da913008f787293856 (diff)
downloadjellything-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.rs42
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,