/// <summary> /// Completes and\or corrects the search request. /// </summary> private PagesListRequestVM NormalizeListRequest(PagesListRequestVM vm) { if (vm == null) { vm = new PagesListRequestVM(); } var orderableFields = new[] { nameof(PageScoredVM.Title), nameof(PageScoredVM.LastUpdateDate), nameof(PageScoredVM.CreationDate), nameof(PageScoredVM.CompletenessScore) }; if (!orderableFields.Contains(vm.OrderBy)) { vm.OrderBy = orderableFields[0]; } if (vm.Page < 0) { vm.Page = 0; } if (vm.OrderDescending == null) { vm.OrderDescending = false; } return(vm); }
/// <summary> /// Finds pages. /// </summary> public async Task <PagesListVM> GetPagesAsync(PagesListRequestVM request) { const int PageSize = 20; request = NormalizeListRequest(request); var query = _db.PagesScored .Include(x => x.MainPhoto) .Where(x => x.IsDeleted == false); if (!string.IsNullOrEmpty(request.SearchQuery)) { query = query.Where(x => x.Title.ToLower().Contains(request.SearchQuery.ToLower())); } if (request.Types?.Length > 0) { query = query.Where(x => request.Types.Contains(x.Type)); } var totalCount = await query.CountAsync(); var items = await query.OrderBy(request.OrderBy, request.OrderDescending ?? false) .ProjectTo <PageScoredVM>(_mapper.ConfigurationProvider) .Skip(PageSize * request.Page) .Take(PageSize) .ToListAsync(); return(new PagesListVM { Items = items, PageCount = (int)Math.Ceiling((double)totalCount / PageSize), Request = request }); }
/// <summary> /// Completes and\or corrects the search request. /// </summary> private PagesListRequestVM NormalizeListRequest(PagesListRequestVM vm) { if (vm == null) { vm = new PagesListRequestVM(); } var orderableFields = new[] { nameof(Page.Title), nameof(Page.LastUpdateDate), nameof(Page.CreationDate) }; if (!orderableFields.Contains(vm.OrderBy)) { vm.OrderBy = orderableFields[0]; } if (vm.Page < 0) { vm.Page = 0; } return(vm); }
public async Task <ActionResult> Index(PagesListRequestVM request) { var vm = await _pages.GetPagesAsync(request); return(View(vm)); }