using Modules.Library.Domain.Entities; using Modules.Library.Domain.Entities.MediaContent.CommonProperties; using Modules.Library.Domain.Entities.MediaContent.Items.Anime; using Modules.Library.Domain.Gateways; using Modules.Library.Domain.Interactors.MediaContent.Anime.Title; namespace Modules.Library.Domain.Interactors.MediaContent.Anime.Episode; public class CreateInteractor : InteractorBase { private readonly IAnimeTitleGateway _gateway; public CreateInteractor(IAnimeTitleGateway gateway, ILanguageGateway languageGateway, IGenreGateway genreGateway) : base(gateway, languageGateway, genreGateway) { this._gateway = gateway; } public async Task Create(Guid animeTitleId, AnimeEpisodeType type, string nameOriginal, Guid nameOriginalLanguageId) { var title = await _gateway.GetByIdAsync(animeTitleId); var episode = new AnimeEpisode(nameOriginal, nameOriginalLanguageId, type); title.Items.Add(episode); await _gateway.UpdateAsync(title); return episode.Id; } public async Task CreateAnimeEpisode(Guid animeTitleId, Guid? animeSeasonId, AnimeEpisodeType type, string nameOriginal, Guid nameOriginalLanguageId) { var title = await GetTitle(animeTitleId); if (animeSeasonId.HasValue) { var season = GetSeason(title, animeSeasonId.Value); var episode = new AnimeEpisode(nameOriginal, nameOriginalLanguageId, type); season.Episodes.Add(episode); await _gateway.UpdateAsync(title); return episode.Id; } else { var episode = new AnimeEpisode(nameOriginal, nameOriginalLanguageId, type); title.Items.Add(episode); await _gateway.UpdateAsync(title); return episode.Id; } } public async Task AddName(Guid animeTitleId, Guid? animeSeasonId, Guid animeEpisodeId, NameType nameType, Guid languageId, string value) { var title = await GetTitle(animeTitleId); await _commonPropertiesService.AddName(title, animeSeasonId, animeEpisodeId, nameType, languageId, value); await _gateway.UpdateAsync(title); } internal async Task AddDescription(Guid animeTitleId, Guid? animeSeasonId, Guid animeEpisodeId, Guid languageId, bool isOriginal, string value) { var title = await GetTitle(animeTitleId); await _commonPropertiesService.AddDescription(title, animeSeasonId, animeEpisodeId, languageId, isOriginal, value); await _gateway.UpdateAsync(title); } internal async Task AddRelatedContent(Guid animeTitleId, Guid? animeSeasonId, Guid animeEpisodeId, string url, MediaInfoType type) { var title = await GetTitle(animeTitleId); CommonPropertiesService.AddRelatedContent(title, animeSeasonId, animeEpisodeId, url, type); await _gateway.UpdateAsync(title); } internal async Task AddGenreProportion(Guid animeTitleId, Guid? animeSeasonId, Guid animeEpisodeId, Guid genreId, decimal? proportion) { var title = await GetTitle(animeTitleId); await _commonPropertiesService.AddGenre(title, animeSeasonId, animeEpisodeId, genreId, proportion); await _gateway.UpdateAsync(title); } internal async Task SetAnnouncementDate(Guid animeTitleId, Guid? animeSeasonId, Guid animeEpisodeId, DateTimeOffset value) { var title = await _gateway.GetByIdAsync(animeTitleId); CommonPropertiesService.SetAnnouncementDate(title, animeSeasonId, animeEpisodeId, value); OnStructureActionCompleted(title, animeSeasonId.HasValue ? GetSeason(title, animeSeasonId.Value) : null); await _gateway.UpdateAsync(title); } internal async Task SetEstimatedReleaseDate(Guid animeTitleId, Guid? animeSeasonId, Guid? animeEpisodeId, DateTimeOffset value) { var title = await _gateway.GetByIdAsync(animeTitleId); CommonPropertiesService.SetEstimatedReleaseDate(title, animeSeasonId, animeEpisodeId, value); OnStructureActionCompleted(title, animeSeasonId.HasValue ? GetSeason(title, animeSeasonId.Value) : null); await _gateway.UpdateAsync(title); } internal async Task SetReleaseDate(Guid animeTitleId, Guid? animeSeasonId, Guid? animeEpisodeId, DateTimeOffset value) { var title = await _gateway.GetByIdAsync(animeTitleId); CommonPropertiesService.SetReleaseDate(title, animeSeasonId, animeEpisodeId, value); OnStructureActionCompleted(title, animeSeasonId.HasValue ? GetSeason(title, animeSeasonId.Value) : null); await _gateway.UpdateAsync(title); } }