MyBookmark/Modules.Library.Database/GatewaysImplementations/Converters/AnimeTitleConverter.cs
THE_KONDRAT 3294f8d88d title:
non season episode
seasons
2024-12-29 19:41:07 +03:00

94 lines
3.6 KiB
C#

using Modules.Library.Database.Database.Models.Anime;
using Modules.Library.Database.Database.Models.CommonProperties;
using Modules.Library.Database.Repositories;
using System.Linq;
namespace Modules.Library.Database.GatewaysImplementations.Converters;
internal class AnimeTitleConverter
{
private readonly LanguageRepository _languageRepository;
private readonly GenreRepository _genreRepository;
private readonly CommonPropertiesConverter _commonPropertiesConverter;
private readonly AnimeSeasonConverter _animeSeasonConverter;
private readonly AnimeEpisodeConverter _animeEpisodeConverter;
internal AnimeTitleConverter(LanguageRepository languageRepository, GenreRepository genreRepository)
{
_languageRepository = languageRepository;
_genreRepository = genreRepository;
_commonPropertiesConverter = new CommonPropertiesConverter(languageRepository, genreRepository);
_animeSeasonConverter = new AnimeSeasonConverter(_commonPropertiesConverter);
_animeEpisodeConverter = new AnimeEpisodeConverter(_commonPropertiesConverter);
}
internal async Task<Application.Models.Anime.Title> Convert(AnimeTitle title)
{
var dto = new Application.Models.Anime.Title
{
Id = title.Id,
Deleted = title.Deleted,
Rate = null,
MyRate = null,
Completed = title.Completed,
CommonProperties = await _commonPropertiesConverter.Convert(title.CommonProperties),
ExpirationTime = title.ExpirationTime,
};
foreach (var season in title.Items.OfType<AnimeSeason>())
{
dto.Items.Add(await _animeSeasonConverter.Convert(season));
}
foreach (var episode in title.Items.OfType<AnimeEpisode>())
{
dto.Items.Add(await _animeEpisodeConverter.Convert(episode));
}
return dto;
}
internal async Task<Domain.Entities.MediaContent.Items.Anime.AnimeTitle> ConvertToDomain(AnimeTitle title)
{
var dto = new Domain.Models.AnimeTitle
{
Id = title.Id,
Deleted = title.Deleted,
Completed = title.Completed,
CommonProperties = await _commonPropertiesConverter.ConvertToDomain(title.CommonProperties),
ExpirationTime = title.ExpirationTime,
};
foreach (var season in title.Items.OfType<AnimeSeason>())
{
dto.Items.Add(await _animeSeasonConverter.ConvertToDomain(season));
}
foreach (var episode in title.Items.OfType<AnimeEpisode>())
{
dto.Items.Add(await _animeEpisodeConverter.ConvertToDomain(episode));
}
return Domain.Entities.MediaContent.Items.Anime.AnimeTitle.New(dto);
}
internal AnimeTitle Convert(Domain.Entities.MediaContent.Items.Anime.AnimeTitle title)
{
var dbTitle = new AnimeTitle
{
Id = title.Id,
CommonProperties = _commonPropertiesConverter.Convert(title.CommonProperties),
Completed = title.Completed,
Deleted = title.Deleted,
ExpirationTime = title.ExpirationTime,
};
if (!title.IsTransient()) dbTitle.Id = title.Id;
foreach (var season in title.Items.OfType<Domain.Entities.MediaContent.Items.Anime.AnimeSeason>())
{
dbTitle.Items.Add(_animeSeasonConverter.Convert(season));
}
foreach (var episode in title.Items.OfType<Domain.Entities.MediaContent.Items.Anime.AnimeEpisode>())
{
dbTitle.Items.Add(_animeEpisodeConverter.Convert(episode));
}
return dbTitle;
}
}