Example #1
0
        public async Task <List <ProductViewModel> > Handle(GetPagedProduct request, CancellationToken cancellationToken)
        {
            var totalCount = dbContext.Products.Count();
            var totalPages = Math.Ceiling((double)totalCount / request.PageSize);

            var productQuery = dbContext.Products.AsNoTracking().AsQueryable();

            if (Query.PropertyExists <Product>(request.OrderBy))
            {
                var orderByExpression = Query.GetPropertyExpression <Product>(request.OrderBy);
                productQuery = productQuery.OrderBy(orderByExpression);
            }
            else
            {
                productQuery = productQuery.OrderBy(c => c.ProductId);
            }

            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <Product, ProductViewModel>()
                .ForMember(dest => dest.CategoryName, opt => opt.MapFrom(src => src.Category.CategoryName))
                .ForMember(dest => dest.SupplierName, opt => opt.MapFrom(src => src.Supplier.CompanyName));
            });

            var productViewModels = await productQuery.Skip((request.PageNumber - 1) *request.PageSize)
                                    .Take(request.PageSize)
                                    .ProjectTo <ProductViewModel>(config).ToListAsync().ConfigureAwait(false);

            return(productViewModels);
        }
Example #2
0
        public async Task <ActionResult <IList <ProductViewModel> > > Get(int pageSize, int pageNumber, string orderBy = "")
        {
            var getPagesProductRequestCommand = new GetPagedProduct()
            {
                PageSize = pageSize, PageNumber = pageNumber, OrderBy = orderBy
            };

            return(await _mediator.Send(getPagesProductRequestCommand));
        }