public override async Task <PagedList <Product> > Query(ListProductsCommand command) { var query = DbContext.Products .Include(o => o.Route).ThenInclude(o => o.AngularComponent) .Include(o => o.Images).ThenInclude(o => o.ImageSizeType) .Include(o => o.ProductDetails).ThenInclude(o => o.ProductDetailType) .Include(o => o.ProductDetails).ThenInclude(o => o.Characteristics).ThenInclude(o => o.Characteristic) .Include(o => o.ProductDetails).ThenInclude(o => o.Characteristics) .Include(o => o.Characteristics).ThenInclude(o => o.Characteristic) .Include(o => o.Characteristics) .AsQueryable(); if (!string.IsNullOrWhiteSpace(command.Search)) { query = query.Where(o => o.Characteristics.Any(i => i.Characteristic.Code == CharacteristicCodes.Name && i.Value.Contains(command.Search))); } var pagedList = await query.ToPagedListAsync(command); var productCharacteristicIds = pagedList.Items.SelectMany(o => o.Characteristics).Select(o => o.Id); await DbContext.ProductCharacteristicTranslations.Where(o => productCharacteristicIds.Contains(o.CharacteristicId) && o.LanguageId == command.LanguageId).LoadAsync(); var productDetailCharacteristicIds = pagedList.Items.SelectMany(o => o.ProductDetails).SelectMany(o => o.Characteristics).Select(o => o.Id); await DbContext.ProductDetailCharacteristicTranslations.Where(o => productDetailCharacteristicIds.Contains(o.CharacteristicId) && o.LanguageId == command.LanguageId).LoadAsync(); var productImageCharacteristicIds = pagedList.Items.SelectMany(o => o.Images).SelectMany(o => o.Characteristics).Select(o => o.Id); await DbContext.ImageCharacteristicTranslations.Where(o => productImageCharacteristicIds.Contains(o.CharacteristicId) && o.LanguageId == command.LanguageId).LoadAsync(); return(pagedList); }
public override async Task <ActionResult <PagedList <ProductDto> > > Handle(ListProductsCommand command) { var products = await _listProductsQuery.Query(command); var productsDto = _mapper.Map(products, new PagedList <ProductDto>(), opt => opt.Items["WorkingLanguageId"] = command.LanguageId); return(Ok(productsDto)); }
public async Task ShouldListProducts() { // Arrange var listProductsCommand = new ListProductsCommand(1, 36); // Act var result = await _listProductsQueryHandler.Handle(listProductsCommand); // Assert Assert.IsNotNull(result?.Object); }
public async Task <IActionResult> ListProducts(ListProductsCommand listProductsCommand) { // TODO: fix workingLanguageId listProductsCommand.LanguageId = 1; var pagedProductsDtoResult = await QueryProcessor.GetQueryHandler <ListProductsCommand, PagedList <ProductDto> >(listProductsCommand); if (pagedProductsDtoResult.Failure) { return(BadRequest(pagedProductsDtoResult.ErrorMessages)); } var pagedProductsDto = pagedProductsDtoResult.Object; return(Ok(pagedProductsDto)); }