public async Task <IActionResult> Search([FromQuery] WidgetSearchRequest searchRequest) { // 1. Checking model state, this can probably be done in global filters and validations steps if (!this.ModelState.IsValid) { return(this.BadRequest()); } // 2. can this be done in a filter validation steps? WidgetSearchRequest actual = searchRequest ?? new WidgetSearchRequest(); // 3. Hmm, have to pass search request into manager somehow, is this the best method PagedSearchResult <Widget> searchResults = await this.DataManager.PagedSearch(searchRequest); // 4. Could inline this, or maybe extension methods IList <WidgetModel> models = searchResults.Results.Select(x => new WidgetModel { Id = x.Id, Name = x.Description }).ToList(); PagedSearchResult <WidgetModel> results = new PagedSearchResult <WidgetModel> { Page = searchResults.Page, PageSize = searchResults.PageSize, Count = searchResults.Count, Results = new ReadOnlyCollection <WidgetModel>(models) }; return(this.Ok(results)); }
public Task <PagedSearchResult <Widget> > PagedSearch(WidgetSearchRequest searchRequest) { IEnumerable <Widget> results = widgets; if (!string.IsNullOrEmpty(searchRequest.Name)) { results = results.Where(x => x.Description.Contains(searchRequest.Name)); } if (searchRequest.OrderBy.Any()) { // TODO : make it go :) } else { results = results.OrderBy(x => x.Id); } results = results.Skip(searchRequest.PageSize * (searchRequest.Page - 1)).Take(searchRequest.PageSize); var stuffs = results.ToList(); PagedSearchResult <Widget> result = new PagedSearchResult <Widget> { Page = searchRequest.Page, PageSize = searchRequest.PageSize, Count = widgets.Count(), Results = new ReadOnlyCollection <Widget>(stuffs) }; return(Task.FromResult <PagedSearchResult <Widget> >(result)); }
protected virtual async Task <PagedSearchResult <TDto> > GetPagedSearchEnumerableAsync( PagedSearchParameter parameter, IQueryable <TEntity> queryable) { var result = new PagedSearchResult <TDto>(); queryable = string.IsNullOrEmpty(parameter.OrderByFieldName) ? GetOrderedQueryableEntity(queryable, "Id", FrameworkCoreConstant.SortOrder.Ascending) : GetOrderedQueryableEntity(queryable, parameter.OrderByFieldName, parameter.SortOrder); result.Count = await queryable.CountAsync(); var entityList = parameter.PageSize == -1 ? await queryable.ToListAsync() : await queryable.Skip(parameter.PageIndex *parameter.PageSize).Take(parameter.PageSize).ToListAsync(); foreach (var entity in entityList) { var dto = new TDto(); EntityToDto(entity, dto); result.Result.Add(dto); } return(result); }
public static void LoadResult <T>(this ListControl lb, PagedSearchResult <T> result) { if (result.IsValid) { lb.DataSource = result.Records; lb.DataBind(); } }
public async Task ThenItShouldMapResultsToApiFormat() { var source = new PagedSearchResult <LearningDeliverySynopsis>(); _learningDeliveryManagerMock.Setup(manager => manager.ListForProviderAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(source); await _controller.ListByUkprnAsync("12345678", "1", CancellationToken.None); _mapperMock.Verify(mapper => mapper.Map <ApiPagedSearchResult <LearningDeliverySynopsis> >(source), Times.Once); }
public async Task ThenItShouldMapResultsToApiFormat() { var source = new PagedSearchResult <FeProviderSynopsis>(); _feProviderManagerMock.Setup(manager => manager.SearchAsync(It.IsAny <int?>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(source); await _controller.ListAsync(null, null, null, CancellationToken.None); _mapperMock.Verify(mapper => mapper.Map <ApiPagedSearchResult <FeProviderSynopsis> >(source), Times.Once); }
public IActionResult List(int page = 1) { var model = new PagedSearchResult <CountryListItem, CountryFilter>(); model.Filter = SearchFilterHelpers.GetSearchFilter <CountryFilter>(this); if (page != model.Filter.Page) { model.Filter.Page = page; SearchFilterHelpers.SetSearchFilter(this, model.Filter); } model.Results = _service.FindManyDtoPaged <CountryListItem>(model.Filter.Page, model.Filter.PageSize, model.Filter.GetSpecification(), model.Filter.GetSortSpecifications()); return(View(model)); }
public async Task ThenItShouldReturnResultsFromRepository(int?ukprn, string legalName, int pageNumber) { var expected = new PagedSearchResult <FeProviderSynopsis> { TotalNumberOfPages = int.MaxValue, }; _feProviderRepositoryMock .Setup(repo => repo.SearchFeProvidersAsync(It.IsAny <int?>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(expected); var actual = await _manager.SearchAsync(ukprn, legalName, pageNumber, CancellationToken.None); Assert.AreSame(expected, actual); }
public async Task ThenItShouldReturnResultFromRepository() { var ukprn = 12345678; var pageNumber = 1; var cancellationToken = new CancellationToken(); var expected = new PagedSearchResult <LearningDeliverySynopsis> { TotalNumberOfPages = int.MaxValue }; _learningDeliveryRepositoryMock .Setup(repo => repo.ListForProviderAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(expected); var actual = await _manager.ListForProviderAsync(ukprn, pageNumber, cancellationToken); Assert.AreSame(expected, actual); }
protected override void Because() { _searchResults = _repo.SearchProducts(new SearchParameters() {Ascending = true, Count = 2, Page = 1, SortColumn = "Name"}); }
private SslamPagedSearchResult MapPagedSearchResultToSslamPagedSearchResult(PagedSearchResult pagedSearchResult) { var mappedSearchResult = AutoMapper.Mapper.Map <SslamPagedSearchResult>(pagedSearchResult); return(mappedSearchResult); }