public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts(
            // string sort, int? brandId, int? typeId)
            [FromQuery] ProductSpecParams productParams)

        {
            // var products = await _productsRepo.ListAllAsync();
            // var spec = new ProductsWithTypesAndBrandsSpecification(sort, brandId, typeId);
            var spec = new ProductsWithTypesAndBrandsSpecification(productParams);

            var countSpec = new ProductWithFilterCountSpecification(productParams);

            var totalItems = await _productsRepo.CountAsync(countSpec);

            var products = await _productsRepo.ListAsync(spec);

            // This can also be done in specifaction section
            // return products.Select(product => new ProductToReturnDto
            // {
            //     Id = product.Id,
            //     Name = product.Name,
            //     Description = product.Description,
            //     PictureUrl = product.PictureUrl,
            //     Price = product.Price,
            //     ProductBrand = product.ProductBrand.Name,
            //     ProductType = product.ProductType.Name

            // }).ToList();
            //    return Ok(_mapper.Map<IReadOnlyList<Product>, IReadOnlyList<ProductToReturnDto>>(products));
            var data = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductToReturnDto> >(products);

            return(Ok(new Pagination <ProductToReturnDto>(productParams.PageIndex, productParams.PageSize, totalItems, data)));
        }
        public async Task <ActionResult <Pagination <ProductDTO> > > GetProducts([FromQuery] ProductSpecParam ProductParams)
        {
            var spec = new ProductswithBrandsAndTypes(ProductParams);

            var CountSpec = new ProductWithFilterCountSpecification(ProductParams);

            var totalItems = _productRepo.CountAsync(CountSpec);

            var products = await _productRepo.ListAsync(spec);

            var Data = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductDTO> >(products);

            return(Ok(new Pagination <ProductDTO>(ProductParams.pageSize, ProductParams.pageIndex, totalItems.Result, Data)));
        }
Example #3
0
        public async Task <IActionResult> GetProducts(
            [FromQuery] ProductSpecParam productSpecParam)
        {
            var spec = new ProductsWithTypesAndBrandsSpecification(productSpecParam);

            var countSpec = new ProductWithFilterCountSpecification(productSpecParam);

            var products = await _productRepository.ListAsync(spec);

            var totalItems = await _productRepository.CountAsync(countSpec);

            var mapData = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductDto> >(products);

            return(OkWithPagination(productSpecParam.PageIndex, productSpecParam.PageSize, totalItems, mapData));

            //return Ok(new Pagination<ProductDto>(productSpecParam.PageIndex, productSpecParam.PageSize, totalItems, mapData));
        }