private async Task <int> CountMatchingProducts(GetProductsForCategoryQuery request, CancellationToken cancellationToken) { return(await _context.Products .Where(product => product.CategoryId == request.CategoryId && !product.IsDeleted) .CountAsync(cancellationToken)); }
private async Task <List <Product> > getProducts(GetProductsForCategoryQuery request, int amountToSkip, CancellationToken cancellationToken) { return(await _context.Products .Where(product => product.CategoryId == request.CategoryId && !product.IsDeleted) .OrderByString(request.OrderBy) .Include(product => product.Manufacturer) .Skip(amountToSkip) .Take(request.PageSize) .ToListAsync(cancellationToken)); }
public async Task <ActionResult <PagedList <ProductSimplifiedDto> > > GetProductsForCategory(Guid id, int?pageNumber, int?pageSize, string?orderBy) { var query = new GetProductsForCategoryQuery(pageNumber, pageSize) { CategoryId = id, OrderBy = orderBy }; var result = await _mediator.Send(query); return(Ok(result)); }
public async Task <PagedList <ProductSimplifiedDto> > Handle(GetProductsForCategoryQuery request, CancellationToken cancellationToken) { var amountToSkip = (request.PageNumber - 1) * request.PageSize; int totalMatchingProducts = await CountMatchingProducts(request, cancellationToken); var pageNumber = request.PageNumber; var totalPages = (int)(Math.Ceiling(totalMatchingProducts / (double)request.PageSize)); if (amountToSkip >= totalMatchingProducts) { amountToSkip = (totalMatchingProducts - request.PageSize) > 0 ? (totalMatchingProducts - request.PageSize) : 0; pageNumber = totalPages; } List <Product> returnedProducts = await getProducts(request, amountToSkip, cancellationToken); var mappedProducts = _mapper.Map <IEnumerable <ProductSimplifiedDto> >(returnedProducts); var pagedResult = new PagedList <ProductSimplifiedDto>(mappedProducts, pageNumber, request.PageSize, totalMatchingProducts); return(pagedResult); }