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; } }