Пример #1
0
        public ActionResult <SongbookCollectionResult> Get(SongbookResourceParameters parameters)
        {
            _logger.LogDebug("SongbookController.Get called with pageNumber {@pageNumber} and {@pageSize}", parameters.PageNumber, parameters.PageSize);

            if (!_propertyMappingService.ValidMappingExistsFor <SongbookDto, Songbook>(parameters.OrderBy))
            {
                return(BadRequest());
            }

            var songbooks = _repository.GetSongbookByCriteria(_mapper.Map <SongbookSearchCriteria>(parameters));

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

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

            var songbookResults  = _mapper.Map <IEnumerable <SongbookResult> >(songbooks);
            var collectionResult = new SongbookCollectionResult()
            {
                Results = songbookResults, Links = CreateLinksForSongbooks(parameters, songbooks.HasNext, songbooks.HasPrevious)
            };

            return(Ok(collectionResult));
        }
Пример #2
0
        private string CreateSongbookResourceUri(SongbookResourceParameters parameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link("GetSongbooks", new
                {
                    pageNumber = parameters.PageNumber - 1,
                    pageSize = parameters.PageSize
                }));

            case ResourceUriType.NextPage:
                return(Url.Link("GetSongbooks", new
                {
                    pageNumber = parameters.PageNumber + 1,
                    pageSize = parameters.PageSize
                }));

            case ResourceUriType.Current:
            default:
                return(Url.Link("GetSongbooks", new
                {
                    pageNumber = parameters.PageNumber,
                    pageSize = parameters.PageSize
                }));
            }
        }
Пример #3
0
        private List <Link> CreateLinksForSongbooks(SongbookResourceParameters parameters, bool hasNext, bool hasPrevious)
        {
            var links = new List <Link>();

            links.Add(new Link(CreateSongbookResourceUri(parameters, ResourceUriType.Current), "self", "GET"));
            links.Add(new Link(CreateSongbookResourceUri(parameters, ResourceUriType.Current), "delete_songbook", "DELETE"));

            if (hasNext)
            {
                links.Add(new Link(CreateSongbookResourceUri(parameters, ResourceUriType.NextPage), "next_page", "GET"));
            }

            if (hasPrevious)
            {
                links.Add(new Link(CreateSongbookResourceUri(parameters, ResourceUriType.PreviousPage), "previous_page", "GET"));
            }

            return(links);
        }