public async Task <ActionResult> GetInstitutions([FromQuery] InstitutionResourceParameters pagedResourceParameters, CancellationToken ct) { var institutionDtos = await _institutionService.GetInstitutionsAsync(pagedResourceParameters, ct); var previousPageLink = institutionDtos.HasPrevious ? CreateInstitutionsResourceUri(pagedResourceParameters, Enums.ResourceUriType.PreviousPage) : null; var nextPageLink = institutionDtos.HasNext ? CreateInstitutionsResourceUri(pagedResourceParameters, Enums.ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = institutionDtos.TotalCount, pageSize = institutionDtos.PageSize, currentPage = institutionDtos.CurrentPage, totalPages = institutionDtos.TotalPages, previousPageLink, nextPageLink }; if (institutionDtos == null) { return(NotFound()); } Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); return(Ok(institutionDtos)); }
public async Task <PagedList <InstitutionDto> > GetInstitutionsAsync(InstitutionResourceParameters resourceParameters, CancellationToken ct) { var institutionEntities = _uow.Institutions.GetAll(); /*if (!string.IsNullOrEmpty(resourceParameters.Name)) * { * if (Enum.TryParse(resourceParameters.Name, true, out University name)) * { * institutionEntities = institutionEntities.Where(a => a.Name == name); * } * }*/ if (!string.IsNullOrEmpty(resourceParameters.SearchQuery)) { var searchQueryForWhereClause = resourceParameters.SearchQuery.Trim().ToLowerInvariant(); institutionEntities = institutionEntities .Where(a => a.Name.ToLowerInvariant().Contains(searchQueryForWhereClause) ); } var pagedListEntities = await PagedList <Institution> .CreateAsync(institutionEntities, resourceParameters.PageNumber, resourceParameters.PageSize, ct); var result = _mapper.Map <PagedList <InstitutionDto> >(pagedListEntities); result.TotalCount = pagedListEntities.TotalCount; result.TotalPages = pagedListEntities.TotalPages; result.CurrentPage = pagedListEntities.CurrentPage; result.PageSize = pagedListEntities.PageSize; return(result); }
private string CreateInstitutionsResourceUri(InstitutionResourceParameters pagedResourceParameters, Enums.ResourceUriType type) { switch (type) { case Enums.ResourceUriType.PreviousPage: return(_linkGenerator.GetUriByName(this.HttpContext, "GetInstitutions", new { name = pagedResourceParameters.Name, code = pagedResourceParameters.Code, searchQuery = pagedResourceParameters.SearchQuery, pageNumber = pagedResourceParameters.PageNumber - 1, pageSize = pagedResourceParameters.PageSize })); // TODO get the aboslute path case Enums.ResourceUriType.NextPage: return(_linkGenerator.GetUriByName(this.HttpContext, "GetInstitutions", new { name = pagedResourceParameters.Name, code = pagedResourceParameters.Code, searchQuery = pagedResourceParameters.SearchQuery, pageNumber = pagedResourceParameters.PageNumber + 1, pageSize = pagedResourceParameters.PageSize })); default: return(_linkGenerator.GetUriByName(this.HttpContext, "GetInstitutions", new { name = pagedResourceParameters.Name, code = pagedResourceParameters.Code, searchQuery = pagedResourceParameters.SearchQuery, pageNumber = pagedResourceParameters.PageNumber, pageSize = pagedResourceParameters.PageSize })); } }