48 lines
2.2 KiB
C#
48 lines
2.2 KiB
C#
using Modules.Library.Domain.Entities.MediaContent.Items.Anime;
|
|
using Modules.Library.Domain.Gateways;
|
|
|
|
namespace Modules.Library.Domain.Interactors.MediaContent.Anime.Title;
|
|
|
|
public abstract class InteractorBase(IAnimeTitleGateway gateway, ILanguageGateway languageGateway, IGenreGateway genreGateway)
|
|
{
|
|
internal readonly CommonPropertiesService _commonPropertiesService = new(languageGateway, genreGateway);
|
|
|
|
protected async Task<AnimeTitle> GetTitle(Guid titleId) => await gateway.GetByIdAsync(titleId);
|
|
protected static AnimeSeason GetSeason(AnimeTitle title, Guid seasonId)
|
|
{
|
|
return title.Items.OfType<AnimeSeason>().First(q => q.Id == seasonId);
|
|
}
|
|
protected static AnimeEpisode GetEpisode(AnimeTitle title, AnimeSeason? season, Guid episodeId)
|
|
{
|
|
if (season != null) return season.Episodes.First(q => q.Id == episodeId);
|
|
else return title.Items.OfType<AnimeEpisode>().First(q => q.Id == episodeId);
|
|
}
|
|
|
|
protected static void OnStructureActionCompleted(AnimeTitle title, AnimeSeason? season = null)
|
|
{
|
|
if (season != null) CheckIfAnimeSeasonCompleted(title, season);
|
|
CheckIfAnimeTitleCompleted(title);
|
|
}
|
|
|
|
private static void CheckIfAnimeTitleCompleted(AnimeTitle title)
|
|
{
|
|
var itemsQuery = title.Items.AsQueryable();
|
|
var ucompletedSeasons = itemsQuery
|
|
.Any(q => !q.CommonProperties.ReleaseDate.HasValue);
|
|
var lastEpisodeReleaseDate = itemsQuery
|
|
.OrderByDescending(q => q.CommonProperties.ReleaseDate)
|
|
.FirstOrDefault()?.CommonProperties.ReleaseDate;
|
|
title.Completed = !(ucompletedSeasons || lastEpisodeReleaseDate >= DateTime.UtcNow - title.ExpirationTime);
|
|
}
|
|
|
|
private static void CheckIfAnimeSeasonCompleted(AnimeTitle title, AnimeSeason season)
|
|
{
|
|
var itemsQuery = title.Items.AsQueryable();
|
|
var ucompletedSeasons = itemsQuery
|
|
.Any(q => !q.CommonProperties.ReleaseDate.HasValue);
|
|
var lastEpisodeReleaseDate = itemsQuery
|
|
.OrderByDescending(q => q.CommonProperties.ReleaseDate)
|
|
.FirstOrDefault()?.CommonProperties.ReleaseDate;
|
|
title.Completed = !(ucompletedSeasons || lastEpisodeReleaseDate >= DateTime.UtcNow - title.ExpirationTime);
|
|
}
|
|
} |