100 lines
4.5 KiB
C#
100 lines
4.5 KiB
C#
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<Guid> 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<Guid> 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);
|
|
}
|
|
} |