using Microsoft.AspNetCore.Mvc; using Nop.Services.Catalog; using Nop.Services.Security; using Nop.Services.Stores; using Nop.Web.Factories; using Nop.Web.Framework.Components; namespace Nop.Web.Components; public partial class HomepageProductsViewComponent : NopViewComponent { protected readonly IAclService _aclService; protected readonly IProductModelFactory _productModelFactory; protected readonly IProductService _productService; protected readonly IStoreMappingService _storeMappingService; public HomepageProductsViewComponent(IAclService aclService, IProductModelFactory productModelFactory, IProductService productService, IStoreMappingService storeMappingService) { _aclService = aclService; _productModelFactory = productModelFactory; _productService = productService; _storeMappingService = storeMappingService; } public async Task InvokeAsync(int? productThumbPictureSize) { var products = await (await _productService.GetAllProductsDisplayedOnHomepageAsync()) //ACL and store mapping .WhereAwait(async p => await _aclService.AuthorizeAsync(p) && await _storeMappingService.AuthorizeAsync(p)) //availability dates .Where(p => _productService.ProductIsAvailable(p)) //visible individually .Where(p => p.VisibleIndividually).ToListAsync(); if (!products.Any()) return Content(""); var model = (await _productModelFactory.PrepareProductOverviewModelsAsync(products, true, true, productThumbPictureSize)).ToList(); return View(model); } }