using Modules.Library.Domain.Gateways; using Modules.Library.Domain.Entities.MediaContent.Items.Anime; using Modules.Library.Domain.EntityBuilders; using Modules.Library.Domain.Interactors.MediaContent.Anime.Title; namespace Modules.Library.Application.Services.MediaContent; public class AnimeTitleService(IAnimeTitleGateway titleGateway, ILanguageGateway languageGateway, IGenreGateway genreGateway) { private readonly CreateInteractor createInteractor = new (titleGateway, languageGateway, genreGateway); public async Task New(string nameOriginal, Guid nameOriginalLanguageId) => await createInteractor.Create(nameOriginal, nameOriginalLanguageId); public async Task AddSeason(Guid titleId, string nameOriginal, Guid nameOriginalLanguageId) => await createInteractor.CreateAnimeSeason(titleId, nameOriginal, nameOriginalLanguageId); public async Task AddEpisode(Guid titleId, Guid? seasonId, AnimeEpisodeType episodeType, string nameOriginal, Guid nameOriginalLanguageId) { if (seasonId.HasValue) return await createInteractor.CreateAnimeEpisode(titleId, seasonId.Value, episodeType, nameOriginal, nameOriginalLanguageId); else return await createInteractor.CreateAnimeEpisode(titleId, episodeType, nameOriginal, nameOriginalLanguageId); } /* public async Task AddEpisodeAsVariant(string titleId, string seasonId, AnimeEpisodeType episodeType, ushort order) { var title = await titleGateway.GetByIdAsync(titleId); var season = title.Items.OfType().FirstOrDefault(q => q.Id == seasonId) ?? throw new Exception("NotFound"); season.AddEpisodeAsVariant(episodeType, order); } */ //public async Task RemoveItem(string titleId, string itemId) //{ // var title = await titleGateway.GetByIdAsync(titleId); // var item = title.Items.FirstOrDefault(q => q.Id == itemId) ?? // throw new Exception("NotFound"); // if (item is AnimeSeason season) title.RemoveSeason(season); // else if (item is AnimeEpisode episode) title.RemoveEpisode(episode); //} //public async Task Edit(string seasonId, TimeSpan? expirationTime) //{ // var title = await titleGateway.GetByIdAsync(seasonId); // title.SetExpirationTime(expirationTime ?? TimeSpan.Zero); //} }