public IActionResult GetAnnouncements([FromQuery] AnnouncementsResourceParameters announcementsResourceParameters) { if (!_typeHelperService.TypeHasProperties <AnnouncementForGetting>(announcementsResourceParameters.Fields)) { return(BadRequest()); } var announcementsFromDb = _announcementsRepository.GetAnnouncements(announcementsResourceParameters); var previousPageLink = announcementsFromDb.HasPrevious ? CreateAnnouncementsResourceUri(announcementsResourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = announcementsFromDb.HasNext ? CreateAnnouncementsResourceUri(announcementsResourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = announcementsFromDb.TotalCount, pageSize = announcementsFromDb.PageSize, currentPage = announcementsFromDb.CurrentPage, totalPages = announcementsFromDb.TotalPages, previousPageLink, nextPageLink }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); var announcementsForGetting = Mapper.Map <IEnumerable <AnnouncementForGetting> >(announcementsFromDb); return(Ok(announcementsForGetting.ShapeData(announcementsResourceParameters.Fields))); }
private string CreateAnnouncementsResourceUri(AnnouncementsResourceParameters announcementsResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(_urlHelper.Link("GetAnnouncements", new { fields = announcementsResourceParameters.Fields, searchString = announcementsResourceParameters.SearchString, pageNumber = announcementsResourceParameters.PageNumber - 1, pageSize = announcementsResourceParameters.PageSize })); case ResourceUriType.NextPage: return(_urlHelper.Link("GetAnnouncements", new { fields = announcementsResourceParameters.Fields, searchString = announcementsResourceParameters.SearchString, pageNumber = announcementsResourceParameters.PageNumber + 1, pageSize = announcementsResourceParameters.PageSize })); default: return(_urlHelper.Link("GetAnnouncements", new { fields = announcementsResourceParameters.Fields, searchString = announcementsResourceParameters.SearchString, pageNumber = announcementsResourceParameters.PageNumber, pageSize = announcementsResourceParameters.PageSize })); } }
public PagedList <Announcement> GetAnnouncements(AnnouncementsResourceParameters announcementsResourceParameters) { var collectionFromDb = _context.Announcements .OrderByDescending(a => a.VipAnnouncement) .ThenBy(a => a.Title).AsQueryable(); if (!string.IsNullOrEmpty(announcementsResourceParameters.SearchString)) { var normalizedSearchString = announcementsResourceParameters.SearchString.Trim().ToLowerInvariant(); collectionFromDb = collectionFromDb.Where(a => a.Title.ToLowerInvariant().Contains(normalizedSearchString)); } return(PagedList <Announcement> .Create(collectionFromDb, announcementsResourceParameters.PageNumber, announcementsResourceParameters.PageSize)); }