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
                }));
            }
        }
示例#3
0
        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));
        }