public async Task <IActionResult> GetVisitPersons([FromQuery] VisitPersonParametersDto visitPersonParametersDto)
        {
            var visitPersonsFromRepo = await _visitPersonRepository.GetVisitPersonsAsync(visitPersonParametersDto);

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

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

            var visitPersonsDto = _mapper.Map <IEnumerable <VisitPersonDto> >(visitPersonsFromRepo);
            var response        = new Response <IEnumerable <VisitPersonDto> >(visitPersonsDto);

            return(Ok(response));
        }
Beispiel #2
0
        public async Task <PagingResponse <VisitPersonDto> > GetVisitPersonsAsync(VisitPersonParametersDto visitPersonParameters)
        {
            var queryStringParam = new Dictionary <string, string>
            {
                ["pageNumber"] = visitPersonParameters.PageNumber.ToString(),
                ["pageSize"]   = visitPersonParameters.PageSize.ToString(),
                ["sortOrder"]  = visitPersonParameters.SortOrder.ToString(),
                ["filters"]    = visitPersonParameters.Filters.ToString()
            };

            using (var httpClient = new HttpClient())
            {
                using (var response = await httpClient.GetAsync(QueryHelpers.AddQueryString(uriVisitPerson.ToString(), queryStringParam)))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        var pagingResponse = new PagingResponse <VisitPersonDto>
                        {
                            Items    = JsonConvert.DeserializeObject <PageListVisitPersons>(content).VisitPersons,
                            Metadata = JsonConvert.DeserializeObject <MetaData>(response.Headers.GetValues("x-pagination").First())
                        };

                        pagingResponse.Filters   = visitPersonParameters.Filters;
                        pagingResponse.SortOrder = visitPersonParameters.SortOrder;
                        return(pagingResponse);
                    }
                    return(null);
                }
            }
        }
        public async Task <PagedList <VisitPerson> > GetVisitPersonsAsync(VisitPersonParametersDto visitPersonParameters)
        {
            if (visitPersonParameters == null)
            {
                throw new ArgumentNullException(nameof(visitPersonParameters));
            }

            var collection = _context.VisitPersons
                             .Include(v => v.Visit)
                             .Include(p => p.Person)
                             .Include(t => t.VehicleType)
                             as IQueryable <VisitPerson>; // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate

            var sieveModel = new SieveModel
            {
                Sorts   = visitPersonParameters.SortOrder ?? "VisitPersonId",
                Filters = visitPersonParameters.Filters
            };

            collection = _sieveProcessor.Apply(sieveModel, collection);

            return(await PagedList <VisitPerson> .CreateAsync(collection,
                                                              visitPersonParameters.PageNumber,
                                                              visitPersonParameters.PageSize));
        }