in src/Modules/SimplCommerce.Module.Catalog/Areas/Catalog/Controllers/ProductController.cs [77:124]
public async Task<IActionResult> ProductDetail(long id)
{
var product = _productRepository.Query()
.Include(x => x.OptionValues)
.Include(x => x.Categories).ThenInclude(c => c.Category)
.Include(x => x.AttributeValues).ThenInclude(a => a.Attribute)
.Include(x => x.ProductLinks).ThenInclude(p => p.LinkedProduct).ThenInclude(m => m.ThumbnailImage)
.Include(x => x.ThumbnailImage)
.Include(x => x.Medias).ThenInclude(m => m.Media)
.Include(x => x.Brand)
.FirstOrDefault(x => x.Id == id && x.IsPublished);
if (product == null)
{
return NotFound();
}
var model = new ProductDetail
{
Id = product.Id,
Name = _contentLocalizationService.GetLocalizedProperty(product, nameof(product.Name), product.Name),
Brand = product.Brand,
CalculatedProductPrice = _productPricingService.CalculateProductPrice(product),
IsCallForPricing = product.IsCallForPricing,
IsAllowToOrder = product.IsAllowToOrder,
StockTrackingIsEnabled = product.StockTrackingIsEnabled,
StockQuantity = product.StockQuantity,
ShortDescription = _contentLocalizationService.GetLocalizedProperty(product, nameof(product.ShortDescription), product.ShortDescription),
MetaTitle = product.MetaTitle,
MetaKeywords = product.MetaKeywords,
MetaDescription = product.MetaDescription,
Description = _contentLocalizationService.GetLocalizedProperty(product, nameof(product.Description), product.Description),
Specification = _contentLocalizationService.GetLocalizedProperty(product, nameof(product.Specification), product.Specification),
ReviewsCount = product.ReviewsCount,
RatingAverage = product.RatingAverage,
Attributes = product.AttributeValues.Select(x => new ProductDetailAttribute { Name = x.Attribute.Name, Value = x.Value }).ToList(),
Categories = product.Categories.Select(x => new ProductDetailCategory { Id = x.CategoryId, Name = x.Category.Name, Slug = x.Category.Slug }).ToList()
};
MapProductVariantToProductVm(product, model);
MapRelatedProductToProductVm(product, model);
MapProductOptionToProductVm(product, model);
MapProductImagesToProductVm(product, model);
await _mediator.Publish(new EntityViewed { EntityId = product.Id, EntityTypeId = "Product" });
_productRepository.SaveChanges();
return View(model);
}