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)); }
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 })); } }
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); }