Esempio n. 1
0
        [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
        }
Esempio n. 2
0
        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)));
        }
Esempio n. 3
0
        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();
        }
Esempio n. 5
0
        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
                }));
            }
        }
Esempio n. 6
0
        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);
        }