MyBookmark/Modules.Library.Domain/EntityBuilders/CommonPropertiesBuilder.cs
2024-09-04 23:08:56 +03:00

83 lines
2.9 KiB
C#

using Modules.Library.Domain.EntitiesV0;
using Modules.Library.Domain.EntitiesV0.MediaContent.CommonProperties;
using Modules.Library.Domain.EntitiesV0.MediaContent.CommonProperties.ShadowEntities;
namespace Modules.Library.Domain.EntityBuilders;
public class CommonPropertiesBuilder
{
private CommonPropertiesShadow _commonProperties = new();
public CommonPropertiesBuilder AddName(string languageId, NameType type, string value)
{
_commonProperties.names.Add(new NameItem(languageId, type, value));
return this;
}
public CommonPropertiesBuilder SetPreview(string url, MediaInfoType type)
{
_commonProperties.preview = new MediaInfo(url, type);
return this;
}
public CommonPropertiesBuilder AddDescription(string languageId, bool isOriginal, string value)
{
_commonProperties.descriptions.Add(new DescriptionItem(languageId, isOriginal, value));
return this;
}
public CommonPropertiesBuilder AddGenreProportion(string genreId, decimal? proportion)
{
_commonProperties.genres.Add(new GenreProportionItem(genreId, proportion));
return this;
}
public CommonPropertiesBuilder AddRelatedContent(string url, MediaInfoType type)
{
_commonProperties.relatedContent.Add(new MediaInfo(url, type));
return this;
}
public CommonPropertiesBuilder SetAnouncementDate(DateTimeOffset? value)
{
_commonProperties.announcementDate = value;
return this;
}
public CommonPropertiesBuilder SetEstimatedReleaseDate(DateTimeOffset? value)
{
_commonProperties.estimatedReleaseDate = value;
return this;
}
public CommonPropertiesBuilder SetReleaseDate(DateTimeOffset? value)
{
_commonProperties.releaseDate = value;
return this;
}
internal static CommonPropertiesBuilder FromCommonProperties(CommonProperties item)
{
var builder = new CommonPropertiesBuilder();
foreach (var name in item.Names) { builder.AddName(name.LanguageId, name.Type, name.Value); }
if (item.Preview != null) builder
.SetPreview(item.Preview.Url, item.Preview.Type);
foreach (var description in item.Descriptions) { builder.AddDescription(description.LanguageId, description.IsOriginal, description.Value); }
foreach (var genreProportion in item.Genres) { builder.AddGenreProportion(genreProportion.GenreId, genreProportion.Proportion); }
foreach (var repatedContent in item.RelatedContent) { builder.AddRelatedContent(repatedContent.Url, repatedContent.Type); }
builder.SetAnouncementDate(item.AnnouncementDate);
builder.SetEstimatedReleaseDate(item.EstimatedReleaseDate);
builder.SetReleaseDate(item.ReleaseDate);
return builder;
}
internal CommonPropertiesShadow Build()
{
return _commonProperties;
}
}