From 7e0e359f46d37d6132fa4966f22d95220849623b Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sat, 28 Oct 2023 22:32:23 +0200 Subject: [PATCH] Hotfix next/previous episodes causing a 500 --- .../Models/Resources/Episode.cs | 24 +++++++++++++++++++ .../Models/Resources/Movie.cs | 1 - .../Models/Resources/Season.cs | 1 - .../Models/Resources/Show.cs | 1 - .../Repositories/LocalRepository.cs | 4 +++- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/back/src/Kyoo.Abstractions/Models/Resources/Episode.cs b/back/src/Kyoo.Abstractions/Models/Resources/Episode.cs index 5a009bf7..cb221a21 100644 --- a/back/src/Kyoo.Abstractions/Models/Resources/Episode.cs +++ b/back/src/Kyoo.Abstractions/Models/Resources/Episode.cs @@ -19,7 +19,9 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.Linq; using System.Text.RegularExpressions; +using EntityFrameworkCore.Projectables; using JetBrains.Annotations; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models.Attributes; @@ -155,13 +157,35 @@ namespace Kyoo.Abstractions.Models /// /// The previous episode that should be seen before viewing this one. /// + [Projectable(UseMemberBody = nameof(_PreviousEpisode))] [LoadableRelation] public Episode? PreviousEpisode { get; set; } + private Episode? _PreviousEpisode => Show!.Episodes! + .OrderByDescending(x => x.AbsoluteNumber) + .ThenByDescending(x => x.SeasonNumber) + .ThenByDescending(x => x.EpisodeNumber) + .FirstOrDefault(x => + x.AbsoluteNumber < AbsoluteNumber + || x.SeasonNumber < SeasonNumber + || (x.SeasonNumber == SeasonNumber && x.EpisodeNumber < EpisodeNumber) + ); + /// /// The next episode to watch after this one. /// + [Projectable(UseMemberBody = nameof(_NextEpisode))] [LoadableRelation] public Episode? NextEpisode { get; set; } + private Episode? _NextEpisode => Show!.Episodes! + .OrderBy(x => x.AbsoluteNumber) + .ThenBy(x => x.SeasonNumber) + .ThenBy(x => x.EpisodeNumber) + .FirstOrDefault(x => + x.AbsoluteNumber > AbsoluteNumber + || x.SeasonNumber > SeasonNumber + || (x.SeasonNumber == SeasonNumber && x.EpisodeNumber > EpisodeNumber) + ); + /// /// Links to watch this episode. /// diff --git a/back/src/Kyoo.Abstractions/Models/Resources/Movie.cs b/back/src/Kyoo.Abstractions/Models/Resources/Movie.cs index a102a93c..e4489389 100644 --- a/back/src/Kyoo.Abstractions/Models/Resources/Movie.cs +++ b/back/src/Kyoo.Abstractions/Models/Resources/Movie.cs @@ -110,7 +110,6 @@ namespace Kyoo.Abstractions.Models /// /// The Studio that made this show. - /// This must be explicitly loaded via a call to . /// [LoadableRelation(nameof(StudioID))][EditableRelation] public Studio? Studio { get; set; } diff --git a/back/src/Kyoo.Abstractions/Models/Resources/Season.cs b/back/src/Kyoo.Abstractions/Models/Resources/Season.cs index df9d24b9..3f6865ed 100644 --- a/back/src/Kyoo.Abstractions/Models/Resources/Season.cs +++ b/back/src/Kyoo.Abstractions/Models/Resources/Season.cs @@ -73,7 +73,6 @@ namespace Kyoo.Abstractions.Models /// /// The show that contains this season. - /// This must be explicitly loaded via a call to . /// [LoadableRelation(nameof(ShowId))] public Show? Show { get; set; } diff --git a/back/src/Kyoo.Abstractions/Models/Resources/Show.cs b/back/src/Kyoo.Abstractions/Models/Resources/Show.cs index 9345d66a..98dd1d61 100644 --- a/back/src/Kyoo.Abstractions/Models/Resources/Show.cs +++ b/back/src/Kyoo.Abstractions/Models/Resources/Show.cs @@ -113,7 +113,6 @@ namespace Kyoo.Abstractions.Models /// /// The Studio that made this show. - /// This must be explicitly loaded via a call to . /// [LoadableRelation(nameof(StudioId))][EditableRelation] public Studio? Studio { get; set; } diff --git a/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs index 7133bb63..120b930b 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs @@ -273,7 +273,9 @@ namespace Kyoo.Core.Controllers { if (include == null) return query; - foreach (string field in include.Fields) + foreach (string field in include.Fields + // TODO: Remove this hotfix + .Where(x => x != "NextEpisode" && x != "PreviousEpisode")) query = query.Include(field); return query; }