Skip to content
Snippets Groups Projects
Verified Commit c9d4bf9b authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Fixes several issues

parent 518c2e3a
No related branches found
No related tags found
No related merge requests found
use serde::{Deserialize, Serialize};
use crate::config::Config;
use crate::models::*;
use crate::dto_helpers::{absolute_url, UrlKind};
use crate::models::*;
#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
......@@ -37,7 +37,7 @@ impl TitleDto {
images: Vec<ImageDto>,
media: Vec<MediaDto>,
subtitles: Vec<SubtitleDto>,
preview: Option<String>
preview: Option<String>,
) -> Self {
TitleDto {
ids: TitleIdDto {
......@@ -280,6 +280,5 @@ pub struct GenreWithTitlesDto {
#[serde(rename_all = "camelCase")]
pub struct TitleMetaDto {
pub title: TitleDto,
pub show: Option<TitleDto>,
pub episodes: Vec<EpisodeDto>,
pub show: Option<EpisodeDto>,
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ pub fn load_episodes(db: &PgConnection, config: &Config, title_id: Uuid) -> Quer
let titles: Vec<(TitleEpisode, Title)> = title_episodes::table
.filter(title_episodes::show_id.eq(title_id))
.inner_join(titles::table.on(titles::id.eq(title_episodes::episode_id)))
.order((title_episodes::season_number.asc(), title_episodes::episode_number.asc(), title_episodes::air_date.asc()))
.load::<(TitleEpisode, Title)>(db)?;
let (episodes, titles): (Vec<TitleEpisode>, Vec<Title>) = titles.into_iter().unzip();
let titles = load_titles(db, config, titles)?;
......@@ -19,13 +20,12 @@ pub fn load_episodes(db: &PgConnection, config: &Config, title_id: Uuid) -> Quer
.collect::<Vec<_>>())
}
pub fn load_show(db: &PgConnection, config: &Config, title_id: Uuid) -> QueryResult<TitleDto> {
let show = title_episodes::table
pub fn load_show(db: &PgConnection, config: &Config, title_id: Uuid) -> QueryResult<EpisodeDto> {
let (episode, show) = title_episodes::table
.filter(title_episodes::episode_id.eq(title_id))
.inner_join(titles::table.on(titles::id.eq(title_episodes::show_id)))
.select(titles::all_columns)
.first::<Title>(db)?;
load_title(db, config, show)
.first::<(TitleEpisode, Title)>(db)?;
Ok(EpisodeDto::of(episode, load_title(db, config, show)?))
}
pub fn load_title(db: &PgConnection, config: &Config, title: Title) -> QueryResult<TitleDto> {
......@@ -47,14 +47,15 @@ pub fn load_title(db: &PgConnection, config: &Config, title: Title) -> QueryResu
.load::<TitleMedium>(db)?;
let title_subtitles: Vec<TitleSubtitle> = TitleSubtitle::belonging_to(&title)
.load::<TitleSubtitle>(db)?;
let title_preview: TitlePreview = TitlePreview::belonging_to(&title)
.first::<TitlePreview>(db)?;
let title_preview: Option<TitlePreview> = TitlePreview::belonging_to(&title)
.first::<TitlePreview>(db)
.optional()?;
Ok(process_title(
config,
title, title_names, title_descriptions,
title_cast, title_genres, title_ratings,
title_images, title_media, title_subtitles,
Some(title_preview),
title_preview,
))
}
......
......@@ -19,7 +19,7 @@ use url::Url;
use media_backend::config::Config;
use media_backend::dto::*;
use media_backend::dto_helpers::{load_title, load_titles, load_episodes, load_show};
use media_backend::dto_helpers::{load_episodes, load_show, load_title, load_titles};
use media_backend::models::*;
use media_backend::param_helpers::ParamUuid;
......@@ -74,15 +74,10 @@ fn get_title(db: MediaflixConnection, config: State<Config>, title_id: ParamUuid
match title.kind.as_str() {
"episode" => {
let show = load_show(&db.0, &config, title.ids.uuid)?;
let episodes = load_episodes(&db.0, &config, show.ids.uuid)?;
Ok(Json(TitleMetaDto { title, show: Some(show), episodes }))
}
"show" => {
let episodes = load_episodes(&db.0, &config, title.ids.uuid)?;
Ok(Json(TitleMetaDto { title, show: None, episodes }))
Ok(Json(TitleMetaDto { title, show: Some(show) }))
}
_ => {
Ok(Json(TitleMetaDto { title, show: None, episodes: vec![] }))
Ok(Json(TitleMetaDto { title, show: None }))
}
}
}
......@@ -106,7 +101,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
list_genres,
get_genre,
list_titles,
get_title
get_title,
list_episodes
],
)
.mount("/static", StaticFiles::from(env::var("MEDIAFLIX_PATH")?))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment