[HttpHead] // return the infomation of the server (infomation in the header) to client public IActionResult GetBands([FromQuery] BandResourceParameters bandResourceParameters) // It will automatically map to the query strings? { if (!_propertyMappingService.ValidMappingExists <BandDto, Band>(bandResourceParameters.OrderBy)) { return(BadRequest()); } if (!_propertyValidationService.HasValidProperties <BandDto>(bandResourceParameters.Fields)) { return(BadRequest()); } var bandsFromRepo = _bandAlbumRepository.GetBands(bandResourceParameters); var previousPagePageLink = bandsFromRepo.HasPrevious ? CreateBandsUri(bandResourceParameters, UriType.PreviousPage) : null; var nextPageLink = bandsFromRepo.HasNext ? CreateBandsUri(bandResourceParameters, UriType.NextPage) : null; var metaData = new { totalCount = bandsFromRepo.TotalCount, pageSize = bandsFromRepo.PageSize, currentPage = bandsFromRepo.CurrentPage, totalPages = bandsFromRepo.TotalPages, previousPagePageLink, nextPageLink, }; Response.Headers.Add("Pagination", JsonSerializer.Serialize(metaData)); // Adding the Pagination Header to the Response return(Ok(_mapper.Map <IEnumerable <BandDto> >(bandsFromRepo).ShapeData(bandResourceParameters.Fields))); // Serialise the Data to JSON }
public IActionResult getBands([FromQuery] BandResourceParameters bandResourceParameters) { if (!_propertyMappingService.ValidMappingExists <BandDto, Entities.Band> (bandResourceParameters.OrderBy)) { return(BadRequest()); } if (!_propertyValidationService.HasValidParameters <BandDto>(bandResourceParameters.Fields)) { return(BadRequest()); } var bandsFromRepo = _bandAlbumRepository.GetBands(bandResourceParameters); var previousPageLink = bandsFromRepo.HasPrevious ? CreateBandsUri(bandResourceParameters, UriType.PreviousPage) : null; var nextPageLink = bandsFromRepo.HasNext ? CreateBandsUri(bandResourceParameters, UriType.NextPage) : null; var metaData = new { totalCount = bandsFromRepo.TotalCount, pageSize = bandsFromRepo.PageSize, currentPage = bandsFromRepo.CurrentPage, totalPages = bandsFromRepo.TotalPages, previousPageLink, nextPageLink }; Response.Headers.Add("Pagination", JsonSerializer.Serialize(metaData)); return(new OkObjectResult(_mapper.Map <IEnumerable <BandDto> >(bandsFromRepo).ShapeData(bandResourceParameters.Fields))); }
public PagedList <Band> GetBands(BandResourceParameters bandResourceParameters) { if (bandResourceParameters == null) { throw new ArgumentNullException(nameof(bandResourceParameters)); } var collection = _context.Bands as IQueryable <Band>; if (!string.IsNullOrWhiteSpace(bandResourceParameters.MainGenre)) { var mainGenre = bandResourceParameters.MainGenre.Trim(); collection = collection.Where(b => b.MainGenre == mainGenre); } if (!string.IsNullOrWhiteSpace(bandResourceParameters.SearchQuery)) { var searchQuery = bandResourceParameters.SearchQuery.Trim(); collection = collection.Where(b => b.Name.Contains(searchQuery)); } if (!string.IsNullOrWhiteSpace(bandResourceParameters.OrderBy)) { var bandPropertyMappingDictionary = _propertyMappingService.GetPropertyMapping <Models.BandDto, entities.Band>(); collection = collection.ApplySort(bandResourceParameters.OrderBy, bandPropertyMappingDictionary); } return(PagedList <Band> .Create(collection, bandResourceParameters.PageNumber, bandResourceParameters.PageSize)); }
public PageList <Band> GetBands(BandResourceParameters bandResourceParameters) { if (bandResourceParameters == null) { throw new ArgumentNullException(nameof(bandResourceParameters)); } //if (string.IsNullOrWhiteSpace(bandResourceParameters.MainGenre) && string.IsNullOrWhiteSpace(bandResourceParameters.SearchQuery)) // return await GetBands(); var collection = _context.Bands as IQueryable <Band>; if (!string.IsNullOrWhiteSpace(bandResourceParameters.MainGenre)) { // Doing mainGenre filtering var mainGenre = bandResourceParameters.MainGenre.Trim(); collection = collection.Where(b => b.MainGenre == mainGenre); } if (!string.IsNullOrWhiteSpace(bandResourceParameters.SearchQuery)) { var searhcQuery = bandResourceParameters.SearchQuery.Trim().ToLower(); collection = collection.Where(b => b.Name.ToLower().Contains(searhcQuery)); } // Do Sorting here if (!string.IsNullOrWhiteSpace(bandResourceParameters.OrderBy)) { var bandPropertyMappingDictionary = _propertyMappingService.GetPropertyMappig <BandDto, Band>(); // Get the band PropertyMapping collection = collection.ApplySort(bandResourceParameters.OrderBy, bandPropertyMappingDictionary); } return(PageList <Band> .Create(collection, bandResourceParameters.PageNumber, bandResourceParameters.PageSize)); //return await collection // .Skip(bandResourceParameters.PageSize * (bandResourceParameters.PageNumber - 1)) // If it's the first page, then skip 0 // .Take(bandResourceParameters.PageSize) // .ToListAsync(); }
private string CreateBandsUri(BandResourceParameters bandResourceParameters, UriType uriType) { switch (uriType) { case UriType.PreviousPage: return(Url.Link("GetBands", new { pageNumber = bandResourceParameters.PageNumber - 1, pageSize = bandResourceParameters.PageSize, mainGenre = bandResourceParameters.MainGenre, searchQuery = bandResourceParameters.SearchQuery, OrderBy = bandResourceParameters.OrderBy, Fields = bandResourceParameters.Fields })); case UriType.NextPage: return(Url.Link("GetBands", new { pageNumber = bandResourceParameters.PageNumber + 1, pageSize = bandResourceParameters.PageSize, mainGenre = bandResourceParameters.MainGenre, searchQuery = bandResourceParameters.SearchQuery, OrderBy = bandResourceParameters.OrderBy, Fields = bandResourceParameters.Fields })); default: return(Url.Link("GetBands", new { pageNumber = bandResourceParameters.PageNumber, pageSize = bandResourceParameters.PageSize, mainGenre = bandResourceParameters.MainGenre, searchQuery = bandResourceParameters.SearchQuery, OrderBy = bandResourceParameters.OrderBy, Fields = bandResourceParameters.Fields })); } }
public PagedList <Band> GetBands(BandResourceParameters bandResourceParameters) { if (bandResourceParameters is null) { throw new ArgumentNullException(nameof(bandResourceParameters)); } var mainGenre = bandResourceParameters.MainGenre; var searchQuery = bandResourceParameters.SearchQuery; if (string.IsNullOrWhiteSpace(mainGenre) && string.IsNullOrWhiteSpace(searchQuery)) { var collection = _context.Bands as IQueryable <Band>; if (!string.IsNullOrWhiteSpace(bandResourceParameters.OrderBy)) { var bandPropertyMappingDictionary = _propertyMappingService.GetPropertyMapping <Models.BandDto, Entities.Band>(); collection = collection.ApplySort(bandResourceParameters.OrderBy, bandPropertyMappingDictionary); } return(PagedList <Band> .Create(collection, bandResourceParameters.PageNumber, bandResourceParameters.PageSize)); } using (var bands = _context) { if (!string.IsNullOrWhiteSpace(mainGenre) && !string.IsNullOrWhiteSpace(searchQuery)) { mainGenre = mainGenre.Trim(); searchQuery = searchQuery.Trim(); var collection = (from b in bands.Bands where b.MainGenre == mainGenre && b.Name.Contains(searchQuery) select b); if (!string.IsNullOrWhiteSpace(bandResourceParameters.OrderBy)) { var bandPropertyMappingDictionary = _propertyMappingService.GetPropertyMapping <Models.BandDto, Entities.Band>(); collection = collection.ApplySort(bandResourceParameters.OrderBy, bandPropertyMappingDictionary); } return(PagedList <Band> .Create(collection, bandResourceParameters.PageNumber, bandResourceParameters.PageSize)); } else if (!string.IsNullOrWhiteSpace(mainGenre)) { mainGenre = mainGenre.Trim(); var collection = (from b in bands.Bands where b.MainGenre == mainGenre select b); if (!string.IsNullOrWhiteSpace(bandResourceParameters.OrderBy)) { var bandPropertyMappingDictionary = _propertyMappingService.GetPropertyMapping <Models.BandDto, Entities.Band>(); collection = collection.ApplySort(bandResourceParameters.OrderBy, bandPropertyMappingDictionary); } return(PagedList <Band> .Create(collection, bandResourceParameters.PageNumber, bandResourceParameters.PageSize)); } else if (!string.IsNullOrWhiteSpace(searchQuery)) { searchQuery = searchQuery.Trim(); var collection = (from b in bands.Bands where b.Name.Contains(searchQuery) select b); if (!string.IsNullOrWhiteSpace(bandResourceParameters.OrderBy)) { var bandPropertyMappingDictionary = _propertyMappingService.GetPropertyMapping <Models.BandDto, Entities.Band>(); collection = collection.ApplySort(bandResourceParameters.OrderBy, bandPropertyMappingDictionary); } return(PagedList <Band> .Create(collection, bandResourceParameters.PageNumber, bandResourceParameters.PageSize)); } } return(null); }