示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#4
0
 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);
        }
示例#6
0
        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);
        }
示例#7
0
        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));
        }
示例#8
0
        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);
        }
示例#9
0
        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"});
 }
示例#11
0
        private SslamPagedSearchResult MapPagedSearchResultToSslamPagedSearchResult(PagedSearchResult pagedSearchResult)
        {
            var mappedSearchResult = AutoMapper.Mapper.Map <SslamPagedSearchResult>(pagedSearchResult);

            return(mappedSearchResult);
        }