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

156 lines
6.1 KiB
C#

using Modules.Library.Application.Models.Anime;
using Modules.Library.Database.Database.Models;
using Modules.Library.Database.Database.Models.Anime;
using Modules.Library.Database.Database.Models.CommonProperties;
using Modules.Library.Database.Repositories;
namespace Modules.Library.Database.GatewaysImplementations.Converters;
internal class AnimeSeasonConverter
{
private readonly CommonPropertiesConverter _commonPropertiesConverter;
private readonly AnimeEpisodeConverter _animeEpisodeConverter;
internal AnimeSeasonConverter(CommonPropertiesConverter commonPropertiesConverter)
{
_commonPropertiesConverter = commonPropertiesConverter;
_animeEpisodeConverter = new AnimeEpisodeConverter(commonPropertiesConverter);
}
//private readonly LanguageRepository _languageRepository;
//private readonly GenreRepository _genreRepository;
internal AnimeSeasonConverter(LanguageRepository languageRepository, GenreRepository genreRepository)
{
//_languageRepository = languageRepository;
//_genreRepository = genreRepository;
_commonPropertiesConverter = new CommonPropertiesConverter(languageRepository, genreRepository);
_animeEpisodeConverter = new AnimeEpisodeConverter(_commonPropertiesConverter);
}
/*
internal async Task<AnimeSeasonBuilder> GetBuilder(AnimeSeason season)
{
var seasonBuilder = new AnimeSeasonBuilder();
seasonBuilder.SetDirector(season.Director)
.SetOriginCountry(season.OriginCountry)
.SetNumber(season.Number)
.SetOrder(season.Order)
.SetCommonProperties(await _commonPropertiesConverter.GetBuilder(season.CommonProperties))
.SetExpirationTime(season.ExpirationTime);
if (season.Deleted) seasonBuilder.Deleted();
if (season.Completed) seasonBuilder.Completed();
if (!season.IsTransient()) seasonBuilder.SetId(season.Id);
foreach (var episode in season.Episodes)
{
seasonBuilder.AddEpisode(await _animeEpisodeConverter.GetBuilder(episode));
}
return seasonBuilder;
}
*/
internal async Task<Application.Models.Anime.Season> Convert(AnimeSeason season)
{
var result = new Application.Models.Anime.Season
{
Id = season.Id,
Deleted = season.Deleted,
Completed = season.Completed,
CommonProperties = await _commonPropertiesConverter.Convert(season.CommonProperties),
Number = season.Number,
Order = season.Order,
//Variant = season.Variant,
ExpirationTime = season.ExpirationTime,
Director = season.Director,
OriginCountry = season.OriginCountry,
};
foreach (var episode in season.Episodes)
{
result.Episodes.Add(await _animeEpisodeConverter.Convert(episode));
}
return result;
}
internal AnimeSeason Convert(Domain.Entities.MediaContent.Items.Anime.AnimeSeason season)
{
var dbSeason = new AnimeSeason
{
CommonProperties = new CommonProperties
{
Names = season.CommonProperties.Names.Select(q => new NameItem
{
Value = q.Value,
Type = (NameType)q.Type,
LanguageId = q.LanguageId,
}).ToList(),
Preview = season.CommonProperties.Preview == null ? null : new MediaInfo
{
//Id =
Type = (MediaInfoType)season.CommonProperties.Preview.Type,
ObjectId = season.CommonProperties.Preview.ObjectId,
ContentType = season.CommonProperties.Preview.ContentType,
},
Descriptions = season.CommonProperties.Descriptions.Select(q => new DescriptionItem
{
IsOriginal = q.IsOriginal,
Value = q.Value,
}).ToList(),
Genres = season.CommonProperties.Genres.Select(q => new GenreProportionItem
{
GenreId = q.GenreId,
Proportion = q.Proportion,
}).ToList(),
RelatedContent = season.CommonProperties.RelatedContent.Select(q => new MediaInfo
{
Type = (MediaInfoType)q.Type,
ObjectId = q.ObjectId,
ContentType = q.ContentType,
}).ToList(),
AnnouncementDate = season.CommonProperties.AnnouncementDate,
EstimatedReleaseDate = season.CommonProperties.EstimatedReleaseDate,
ReleaseDate = season.CommonProperties.ReleaseDate,
},
OriginCountry = season.OriginCountry,
Director = season.Director,
Number = season.Number,
Order = season.Order,
//Variant = season.Variant,
Completed = season.Completed,
Deleted = season.Deleted,
ExpirationTime = season.ExpirationTime,
};
if (!season.IsTransient()) dbSeason.Id = season.Id;
foreach (var episode in season.Episodes)
{
dbSeason.Episodes.Add(_animeEpisodeConverter.Convert(episode));
}
return dbSeason;
}
internal async Task<Domain.Models.AnimeSeason> ConvertToDomain(AnimeSeason season)
{
var result = new Domain.Models.AnimeSeason
{
Id = season.Id,
Deleted = season.Deleted,
Completed = season.Completed,
CommonProperties = await _commonPropertiesConverter.ConvertToDomain(season.CommonProperties),
Number = season.Number,
Order = season.Order,
//Variant = season.Variant,
ExpirationTime = season.ExpirationTime,
Director = season.Director,
OriginCountry = season.OriginCountry,
};
foreach (var episode in season.Episodes)
{
result.Episodes.Add(await _animeEpisodeConverter.ConvertToDomain(episode));
}
return result;
}
}