aboutsummaryrefslogtreecommitdiff
path: root/server/src/logic
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-05-26 18:24:16 +0200
committermetamuffin <metamuffin@disroot.org>2025-05-26 18:24:16 +0200
commit3b15caade07e8fbe351fed9aceb3f435bf58368e (patch)
treecce91c229b78061ad36f29d76a76d67c3c737c59 /server/src/logic
parent1eeff5c03e8985d16d4f2b6283741dd82b369bd3 (diff)
downloadjellything-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.rs1
-rw-r--r--server/src/logic/stream.rs20
-rw-r--r--server/src/logic/userdata.rs59
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(())
}