MyBookmark/Modules.Library.Domain/EntityBuilders/AnimeEpisodeBuilder.cs
2024-09-23 03:00:50 +03:00

72 lines
2.3 KiB
C#

using Modules.Library.Domain.Entities.MediaContent.Items.Anime;
namespace Modules.Library.Domain.EntityBuilders;
public class AnimeEpisodeBuilder : AnimeItemBuilder<AnimeEpisode>
{
private static readonly Func<AnimeEpisode> CreateInstanceFunc = CreateInstanceFunction();
private static readonly Action<AnimeEpisodeBuilder, AnimeEpisode> SetInstanceFieldsAction = SetInstanceFieldsAction<AnimeEpisodeBuilder>();
private static readonly Action<AnimeEpisodeBuilder, AnimeEpisode> AddTitleAndSeasonFieldsAction = AddFields([nameof(_title), nameof(_season)]);
private AnimeSeason? _season = null;
private TimeSpan? _duration = null;
private ushort? _variant = null;
private bool? _completed = null;
private TimeSpan? _expirationTime = null;
protected AnimeEpisodeType _type;
public AnimeEpisodeBuilder SetVariant(ushort value)
{
_variant = value;
return this;
}
public AnimeEpisodeBuilder SetDuration(TimeSpan value)
{
_duration = value;
return this;
}
public AnimeEpisodeBuilder SetType(AnimeEpisodeType value)
{
_type = value;
return this;
}
//internal static AnimeEpisodeBuilder FromAnimeEpisode(AnimeEpisode episode)
//{
// var builder = new AnimeEpisodeBuilder();
// builder.SetCommonProperties(CommonPropertiesBuilder.FromCommonProperties(episode.CommonProperties));
// builder.SetOrder(episode.Order);
// builder.SetVariant(episode.Variant);
// if (episode.Duration.HasValue) builder.SetDuration(episode.Duration.Value);
// builder.SetType(episode.Type);
// builder.SetNumber(episode.Number);
// builder.SetCompleted(episode.Completed);
// builder.SetDeleted(episode.Deleted);
// builder.SetExpirationTime(episode.ExpirationTime);
// return builder;
//}
/*
internal AnimeEpisodeShadow Build()
{
return episode;
}
*/
public override AnimeEpisode Build() => throw new NotImplementedException();
internal AnimeEpisode BuildObject(AnimeTitle title, AnimeSeason? season)
{
base.BuildLoaclObjects();
var episode = CreateInstanceFunc();
SetInstanceFieldsAction(this, episode);
_title = title;
_season = season;
AddTitleAndSeasonFieldsAction(this, episode);
return episode;
}
}