/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ use crate::{ url_enum, user::{NodeUserData, User}, Node, NodeKind, }; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use std::{collections::BTreeMap, sync::Arc, time::Duration}; type NodesWithUdata = Vec<(Arc, NodeUserData)>; #[derive(Serialize, Deserialize)] pub struct ApiNodeResponse { pub parents: NodesWithUdata, pub children: NodesWithUdata, pub node: Arc, pub userdata: NodeUserData, } #[derive(Serialize, Deserialize)] pub struct ApiSearchResponse { pub count: usize, pub results: NodesWithUdata, pub duration: Duration, } #[derive(Serialize, Deserialize)] pub struct ApiItemsResponse { pub count: usize, pub pages: usize, pub items: NodesWithUdata, } #[derive(Serialize, Deserialize)] pub struct ApiHomeResponse { pub toplevel: NodesWithUdata, pub categories: Vec<(String, NodesWithUdata)>, } #[derive(Serialize, Deserialize)] pub struct ApiStatsResponse { pub kinds: BTreeMap, pub total: StatsBin, } #[derive(Serialize, Deserialize)] pub struct ApiAdminUsersResponse { pub users: Vec, } #[derive(Serialize, Deserialize)] pub struct LogLine { pub time: DateTime, pub module: Option<&'static str>, pub level: LogLevel, pub message: String, } url_enum!( #[derive(Serialize, Deserialize, Clone, Copy, PartialEq)] enum LogLevel { Trace = "trace", Debug = "debug", Info = "info", Warn = "warn", Error = "error", } ); #[derive(Default, Serialize, Deserialize)] pub struct StatsBin { pub runtime: f64, pub size: u64, pub count: usize, pub max_runtime: (f64, String), pub max_size: (u64, String), } #[derive(Debug, Default, Clone)] pub struct NodeFilterSort { pub sort_by: Option, pub filter_kind: Option>, pub sort_order: Option, } url_enum!( #[derive(Debug, Clone, Copy, PartialEq, Eq)] enum FilterProperty { FederationLocal = "fed_local", FederationRemote = "fed_remote", Watched = "watched", Unwatched = "unwatched", WatchProgress = "watch_progress", KindMovie = "kind_movie", KindVideo = "kind_video", KindShortFormVideo = "kind_short_form_video", KindMusic = "kind_music", KindCollection = "kind_collection", KindChannel = "kind_channel", KindShow = "kind_show", KindSeries = "kind_series", KindSeason = "kind_season", KindEpisode = "kind_episode", } ); url_enum!( #[derive(Debug, Clone, Copy, PartialEq, Eq)] enum SortProperty { ReleaseDate = "release_date", Title = "title", Index = "index", Duration = "duration", RatingRottenTomatoes = "rating_rt", RatingMetacritic = "rating_mc", RatingImdb = "rating_imdb", RatingTmdb = "rating_tmdb", RatingYoutubeViews = "rating_yt_views", RatingYoutubeLikes = "rating_yt_likes", RatingYoutubeFollowers = "rating_yt_followers", RatingUser = "rating_user", RatingLikesDivViews = "rating_loved", } ); url_enum!( #[derive(Debug, Clone, Copy, PartialEq, Eq)] enum SortOrder { Ascending = "ascending", Descending = "descending", } );