diff options
author | metamuffin <metamuffin@disroot.org> | 2025-05-26 18:24:16 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-05-26 18:24:16 +0200 |
commit | 3b15caade07e8fbe351fed9aceb3f435bf58368e (patch) | |
tree | cce91c229b78061ad36f29d76a76d67c3c737c59 /server/src/logic | |
parent | 1eeff5c03e8985d16d4f2b6283741dd82b369bd3 (diff) | |
download | jellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar jellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar.bz2 jellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar.zst |
move all direct database access to logic crate
Diffstat (limited to 'server/src/logic')
-rw-r--r-- | server/src/logic/mod.rs | 1 | ||||
-rw-r--r-- | server/src/logic/stream.rs | 20 | ||||
-rw-r--r-- | server/src/logic/userdata.rs | 59 |
3 files changed, 32 insertions, 48 deletions
diff --git a/server/src/logic/mod.rs b/server/src/logic/mod.rs index 26f45de..a7991f7 100644 --- a/server/src/logic/mod.rs +++ b/server/src/logic/mod.rs @@ -6,4 +6,3 @@ pub mod playersync; pub mod stream; pub mod userdata; - diff --git a/server/src/logic/stream.rs b/server/src/logic/stream.rs index c21edaa..1e518e2 100644 --- a/server/src/logic/stream.rs +++ b/server/src/logic/stream.rs @@ -5,9 +5,9 @@ */ use crate::{helper::A, ui::error::MyError}; use anyhow::{anyhow, Result}; -use jellycommon::{stream::StreamSpec, TrackSource}; +use jellycommon::{api::NodeFilterSort, stream::StreamSpec, NodeID, TrackSource}; use jellyimport::asset_token::AssetInner; -use jellylogic::{session::Session, Database}; +use jellylogic::{node::get_node, session::Session}; use jellystream::SMediaInfo; use log::{info, warn}; use rocket::{ @@ -15,7 +15,7 @@ use rocket::{ http::{Header, Status}, request::{self, FromRequest}, response::{self, Redirect, Responder}, - Either, Request, Response, State, + Either, Request, Response, }; use std::{ collections::{BTreeMap, BTreeSet}, @@ -42,17 +42,21 @@ pub async fn r_stream_head( #[get("/n/<id>/stream?<spec..>")] pub async fn r_stream( - _session: A<Session>, - db: &State<Database>, + session: A<Session>, id: &str, range: Option<RequestRange>, spec: BTreeMap<String, String>, ) -> Result<Either<StreamResponse, RedirectResponse>, MyError> { let spec = StreamSpec::from_query_kv(&spec).map_err(|x| anyhow!("spec invalid: {x}"))?; // TODO perm - let node = db - .get_node_slug(id)? - .ok_or(anyhow!("node does not exist"))?; + let node = get_node( + &session.0, + NodeID::from_slug(id), + false, + false, + NodeFilterSort::default(), + )? + .node; let media = Arc::new( node.media diff --git a/server/src/logic/userdata.rs b/server/src/logic/userdata.rs index ac3cb83..52c3688 100644 --- a/server/src/logic/userdata.rs +++ b/server/src/logic/userdata.rs @@ -5,13 +5,20 @@ */ use crate::{helper::A, ui::error::MyResult}; use jellycommon::{ + api::NodeFilterSort, routes::u_node_id, user::{NodeUserData, WatchedState}, NodeID, }; -use jellylogic::{session::Session, Database}; +use jellylogic::{ + node::{ + get_node, update_node_userdata_rating, update_node_userdata_watched, + update_node_userdata_watched_progress, + }, + session::Session, +}; use rocket::{ - form::Form, get, post, response::Redirect, serde::json::Json, FromForm, FromFormField, State, + form::Form, get, post, response::Redirect, serde::json::Json, FromForm, FromFormField, UriDisplayQuery, }; @@ -23,33 +30,26 @@ pub enum UrlWatchedState { } #[get("/n/<id>/userdata")] -pub fn r_node_userdata( - session: A<Session>, - db: &State<Database>, - id: A<NodeID>, -) -> MyResult<Json<NodeUserData>> { - let u = db - .get_node_udata(id.0, &session.0.user.name)? - .unwrap_or_default(); +pub fn r_node_userdata(session: A<Session>, id: A<NodeID>) -> MyResult<Json<NodeUserData>> { + let u = get_node(&session.0, id.0, false, false, NodeFilterSort::default())?.userdata; Ok(Json(u)) } #[post("/n/<id>/watched?<state>")] pub async fn r_node_userdata_watched( session: A<Session>, - db: &State<Database>, id: A<NodeID>, state: UrlWatchedState, ) -> MyResult<Redirect> { - // TODO perm - db.update_node_udata(id.0, &session.0.user.name, |udata| { - udata.watched = match state { + update_node_userdata_watched( + &session.0, + id.0, + match state { UrlWatchedState::None => WatchedState::None, UrlWatchedState::Watched => WatchedState::Watched, UrlWatchedState::Pending => WatchedState::Pending, - }; - Ok(()) - })?; + }, + )?; Ok(Redirect::found(u_node_id(id.0))) } @@ -62,34 +62,15 @@ pub struct UpdateRating { #[post("/n/<id>/update_rating", data = "<form>")] pub async fn r_node_userdata_rating( session: A<Session>, - db: &State<Database>, id: A<NodeID>, form: Form<UpdateRating>, ) -> MyResult<Redirect> { - // TODO perm - db.update_node_udata(id.0, &session.0.user.name, |udata| { - udata.rating = form.rating; - Ok(()) - })?; + update_node_userdata_rating(&session.0, id.0, form.rating)?; Ok(Redirect::found(u_node_id(id.0))) } #[post("/n/<id>/progress?<t>")] -pub async fn r_node_userdata_progress( - session: A<Session>, - db: &State<Database>, - id: A<NodeID>, - t: f64, -) -> MyResult<()> { - // TODO perm - db.update_node_udata(id.0, &session.0.user.name, |udata| { - udata.watched = match udata.watched { - WatchedState::None | WatchedState::Pending | WatchedState::Progress(_) => { - WatchedState::Progress(t) - } - WatchedState::Watched => WatchedState::Watched, - }; - Ok(()) - })?; +pub async fn r_node_userdata_progress(session: A<Session>, id: A<NodeID>, t: f64) -> MyResult<()> { + update_node_userdata_watched_progress(&session.0, id.0, t)?; Ok(()) } |