Пример #1
0
        public async Task <IActionResult> GetVets([FromQuery] VetParametersDto vetParametersDto)
        {
            var vetsFromRepo = await _vetRepository.GetVetsAsync(vetParametersDto);

            var paginationMetadata = new
            {
                totalCount        = vetsFromRepo.TotalCount,
                pageSize          = vetsFromRepo.PageSize,
                currentPageSize   = vetsFromRepo.CurrentPageSize,
                currentStartIndex = vetsFromRepo.CurrentStartIndex,
                currentEndIndex   = vetsFromRepo.CurrentEndIndex,
                pageNumber        = vetsFromRepo.PageNumber,
                totalPages        = vetsFromRepo.TotalPages,
                hasPrevious       = vetsFromRepo.HasPrevious,
                hasNext           = vetsFromRepo.HasNext
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var vetsDto  = _mapper.Map <IEnumerable <VetDto> >(vetsFromRepo);
            var response = new Response <IEnumerable <VetDto> >(vetsDto);

            return(Ok(response));
        }
Пример #2
0
        public async Task <PagedList <Vet> > GetVetsAsync(VetParametersDto vetParameters)
        {
            if (vetParameters == null)
            {
                throw new ArgumentNullException(nameof(vetParameters));
            }

            var collection = _context.Vets
                             as IQueryable <Vet>; // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate

            var sieveModel = new SieveModel
            {
                Sorts   = vetParameters.SortOrder ?? "VetId",
                Filters = vetParameters.Filters
            };

            collection = _sieveProcessor.Apply(sieveModel, collection);

            return(await PagedList <Vet> .CreateAsync(collection,
                                                      vetParameters.PageNumber,
                                                      vetParameters.PageSize));
        }