public static webModel.Product ToWebModel(this moduleModel.CatalogProduct product, IBlobUrlResolver blobUrlResolver, moduleModel.Property[] properties = null) { var retVal = new webModel.Product(); retVal.InjectFrom(product); retVal.SeoInfos = product.SeoInfos; if (product.Catalog != null) { retVal.Catalog = product.Catalog.ToWebModel(); } if (product.Category != null) { retVal.Category = product.Category.ToWebModel(); } if (product.Assets != null) { var assetBases = product.Assets.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); retVal.Images = assetBases.OfType <webModel.ProductImage>().ToList(); retVal.Assets = assetBases.OfType <webModel.ProductAsset>().ToList(); } if (product.Variations != null) { retVal.Variations = product.Variations.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if (product.Links != null) { retVal.Links = product.Links.Select(x => x.ToWebModel()).ToList(); } if (product.Reviews != null) { retVal.Reviews = product.Reviews.Select(x => x.ToWebModel()).ToList(); } if (product.Associations != null) { retVal.Associations = product.Associations.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } retVal.TitularItemId = product.MainProductId; retVal.Properties = new List <webModel.Property>(); //Need add property for each meta info if (properties != null) { foreach (var property in properties) { var webModelProperty = property.ToWebModel(); webModelProperty.Category = null; webModelProperty.Values = new List <webModel.PropertyValue>(); webModelProperty.IsManageable = true; webModelProperty.IsReadOnly = property.Type != moduleModel.PropertyType.Product && property.Type != moduleModel.PropertyType.Variation; retVal.Properties.Add(webModelProperty); } } //Populate property values if (product.PropertyValues != null) { foreach (var propValue in product.PropertyValues.Select(x => x.ToWebModel())) { var property = retVal.Properties.FirstOrDefault(x => x.IsSuitableForValue(propValue)); if (property == null) { //Need add dummy property for each value without property property = new webModel.Property(propValue, product.CatalogId, product.CategoryId, moduleModel.PropertyType.Product); retVal.Properties.Add(property); } property.Values.Add(propValue); } } return(retVal); }
public static webModel.Product ToWebModel(this moduleModel.CatalogProduct product, IBlobUrlResolver blobUrlResolver) { var retVal = new webModel.Product(); retVal.InjectFrom(product); retVal.SeoInfos = product.SeoInfos; if (product.Catalog != null) { retVal.Catalog = product.Catalog.ToWebModel(); //Reset catalog properties and languages for response size economy retVal.Catalog.Properties = null; } if (product.Category != null) { retVal.Category = product.Category.ToWebModel(blobUrlResolver); //Reset category catalog, properties for response size economy retVal.Category.Catalog = null; retVal.Category.Properties = null; } if (product.Images != null) { retVal.Images = product.Images.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if (product.Assets != null) { retVal.Assets = product.Assets.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if (product.Variations != null) { retVal.Variations = product.Variations.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if (product.Links != null) { retVal.Links = product.Links.Select(x => x.ToWebModel()).ToList(); } if (product.Reviews != null) { retVal.Reviews = product.Reviews.Select(x => x.ToWebModel()).ToList(); } if (product.Associations != null) { retVal.Associations = product.Associations.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } //Init parents if (product.Category != null) { retVal.Parents = new List <webModel.Category>(); if (product.Category.Parents != null) { retVal.Parents.AddRange(product.Category.Parents.Select(x => x.ToWebModel())); } retVal.Parents.Add(product.Category.ToWebModel()); foreach (var parent in retVal.Parents) { //Reset some props to decrease size of resulting json parent.Catalog = null; parent.Properties = null; } } retVal.TitularItemId = product.MainProductId; retVal.Properties = new List <webModel.Property>(); //Need add property for each meta info if (product.Properties != null) { foreach (var property in product.Properties) { var webModelProperty = property.ToWebModel(); //Reset dict values to decrease response size webModelProperty.DictionaryValues = null; webModelProperty.Category = null; webModelProperty.Values = new List <webModel.PropertyValue>(); webModelProperty.IsManageable = true; webModelProperty.IsReadOnly = property.Type != moduleModel.PropertyType.Product && property.Type != moduleModel.PropertyType.Variation; retVal.Properties.Add(webModelProperty); } } //Populate property values if (product.PropertyValues != null) { foreach (var propValue in product.PropertyValues.Select(x => x.ToWebModel())) { var property = retVal.Properties.FirstOrDefault(x => x.Id == propValue.PropertyId); if (property == null) { //Need add dummy property for each value without property property = new webModel.Property(propValue, product.CatalogId, product.CategoryId, moduleModel.PropertyType.Product); retVal.Properties.Add(property); } property.Values.Add(propValue); } } return(retVal); }
public static webModel.Product ToWebModel(this moduleModel.CatalogProduct product, IBlobUrlResolver blobUrlResolver, moduleModel.Property[] properties = null) { var retVal = new webModel.Product(); retVal.InjectFrom(product); retVal.SeoInfos = product.SeoInfos; if (product.Catalog != null) { retVal.Catalog = product.Catalog.ToWebModel(); } if (product.Category != null) { retVal.Category = product.Category.ToWebModel(blobUrlResolver); } if (product.Images != null) { retVal.Images = product.Images.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if(product.Assets != null) { retVal.Assets = product.Assets.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if (product.Variations != null) { retVal.Variations = product.Variations.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if (product.Links != null) { retVal.Links = product.Links.Select(x => x.ToWebModel()).ToList(); } if (product.Reviews != null) { retVal.Reviews = product.Reviews.Select(x => x.ToWebModel()).ToList(); } if (product.Associations != null) { retVal.Associations = product.Associations.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } retVal.TitularItemId = product.MainProductId; retVal.Properties = new List<webModel.Property>(); //Need add property for each meta info if (properties != null) { foreach (var property in properties) { var webModelProperty = property.ToWebModel(); webModelProperty.Category = null; webModelProperty.Values = new List<webModel.PropertyValue>(); webModelProperty.IsManageable = true; webModelProperty.IsReadOnly = property.Type != moduleModel.PropertyType.Product && property.Type != moduleModel.PropertyType.Variation; retVal.Properties.Add(webModelProperty); } } //Populate property values if (product.PropertyValues != null) { foreach (var propValue in product.PropertyValues.Select(x=>x.ToWebModel())) { var property = retVal.Properties.FirstOrDefault(x => x.IsSuitableForValue(propValue)); if (property == null) { //Need add dummy property for each value without property property = new webModel.Property(propValue, product.CatalogId, product.CategoryId, moduleModel.PropertyType.Product); retVal.Properties.Add(property); } property.Values.Add(propValue); } } return retVal; }
public static webModel.Product ToWebModel(this moduleModel.CatalogProduct product, IBlobUrlResolver blobUrlResolver) { var retVal = new webModel.Product(); retVal.InjectFrom(product); retVal.SeoInfos = product.SeoInfos; if (product.Catalog != null) { retVal.Catalog = product.Catalog.ToWebModel(); //Reset catalog properties and languages for response size economy retVal.Catalog.Properties = null; } if (product.Category != null) { retVal.Category = product.Category.ToWebModel(blobUrlResolver); //Reset category catalog, properties for response size economy retVal.Category.Catalog = null; retVal.Category.Properties = null; } if (product.Images != null) { retVal.Images = product.Images.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if(product.Assets != null) { retVal.Assets = product.Assets.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if (product.Variations != null) { retVal.Variations = product.Variations.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } if (product.Links != null) { retVal.Links = product.Links.Select(x => x.ToWebModel()).ToList(); } if (product.Reviews != null) { retVal.Reviews = product.Reviews.Select(x => x.ToWebModel()).ToList(); } if (product.Associations != null) { retVal.Associations = product.Associations.Select(x => x.ToWebModel(blobUrlResolver)).ToList(); } //Init parents if(product.Category != null) { retVal.Parents = new List<webModel.Category>(); if(product.Category.Parents != null) { retVal.Parents.AddRange(product.Category.Parents.Select(x => x.ToWebModel())); } retVal.Parents.Add(product.Category.ToWebModel()); foreach(var parent in retVal.Parents) { //Reset some props to decrease size of resulting json parent.Catalog = null; parent.Properties = null; } } retVal.TitularItemId = product.MainProductId; retVal.Properties = new List<webModel.Property>(); //Need add property for each meta info if (product.Properties != null) { foreach (var property in product.Properties) { var webModelProperty = property.ToWebModel(); //Reset dict values to decrease response size webModelProperty.DictionaryValues = null; webModelProperty.Category = null; webModelProperty.Values = new List<webModel.PropertyValue>(); webModelProperty.IsManageable = true; webModelProperty.IsReadOnly = property.Type != moduleModel.PropertyType.Product && property.Type != moduleModel.PropertyType.Variation; retVal.Properties.Add(webModelProperty); } } //Populate property values if (product.PropertyValues != null) { foreach (var propValue in product.PropertyValues.Select(x=>x.ToWebModel())) { var property = retVal.Properties.FirstOrDefault(x => x.Id == propValue.PropertyId); if (property == null) { //Need add dummy property for each value without property property = new webModel.Property(propValue, product.CatalogId, product.CategoryId, moduleModel.PropertyType.Product); retVal.Properties.Add(property); } property.Values.Add(propValue); } } return retVal; }