Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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));
        }