private string CreateReportResourceUri(ReportResourceParameters parameters, int pageNumberCalculated)
 {
     return(Url.Link(nameof(GetDelinquencyReport), new
     {
         fields = parameters.Fields,
         sort = parameters.Sort,
         associationId = parameters.AssociationId,
         ownerName = parameters.OwnerName,
         lastPaymentDate = parameters.LastPaymentDate,
         pageNumber = pageNumberCalculated,
         pageSize = parameters.PageSize
     }));
 }
Пример #2
0
        public Task <PagedList <DelinquencySummary> > GetDelinquencySummaryReport(ReportResourceParameters reportResourceParameters)
        {
            var query = CreateFakeReportData().AsQueryable();

            if (!string.IsNullOrEmpty(reportResourceParameters.OwnerName))
            {
                query = query.Where(r => r.OwnerName.Contains(reportResourceParameters.OwnerName));
            }
            query = query.ApplySorting(reportResourceParameters.Sort);
            return(Task.FromResult(PagedList <DelinquencySummary> .Create(query,
                                                                          reportResourceParameters.PageNumber,
                                                                          reportResourceParameters.PageSize)));
        }
        public async Task <IActionResult> GetDelinquencyReport(ReportResourceParameters parameters)
        {
            if (!ShapeExtensions.ArePropertiesValidFor <DelinquencySummary>(parameters.Fields))
            {
                return(BadRequest());
            }
            var reportData = await _repository.GetDelinquencySummaryReport(parameters);

            var previousPageLink = reportData.HasPrevious ?
                                   CreateReportResourceUri(parameters, parameters.PageNumber - 1) : null;

            var nextPageLink = reportData.HasNext ?
                               CreateReportResourceUri(parameters, parameters.PageNumber + 1) : null;

            var paginationMetadata = new
            {
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink,
                totalCount       = reportData.TotalCount,
                pageSize         = reportData.PageSize,
                currentPage      = reportData.CurrentPage,
                totalPages       = reportData.TotalPages
            };

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

            var dtoResponse    = _mapper.Map <IEnumerable <DelinquencySummaryDto> >(reportData);
            var reportResponse = new
            {
                data       = dtoResponse.ShapeData(parameters.Fields),
                pagination = paginationMetadata
            };

            return(Ok(reportResponse));
        }