示例#1
0
        public PagedList <Band> GetBands(BandsResourceParameters bandsResourceParameters)

        {
            if (bandsResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(bandsResourceParameters));
            }

            var collection = _context.Bands as IQueryable <Band>;

            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.MainGenre))

            {
                var mainGenre = bandsResourceParameters.MainGenre.Trim();
                collection = collection.Where(b => b.MainGenre == mainGenre);
            }


            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.SearchQuery))

            {
                var searchQuery = bandsResourceParameters.SearchQuery.Trim();
                collection = collection.Where(b => b.Name.Contains(searchQuery));
            }



            return(PagedList <Band> .Create(collection, bandsResourceParameters.PageNumber, bandsResourceParameters.PageSize));
        }
示例#2
0
        public ActionResult <IEnumerable <BandDto> > GetBands([FromQuery] BandsResourceParameters parameters)
        {
            var bands    = _repository.GetBands(parameters);
            var bandsDto = _mapper.Map <IEnumerable <BandDto> >(bands);

            return(Ok(bandsDto));
        }
        public IEnumerable <Band> GetBands(BandsResourceParameters bandsResourceParameters)
        {
            if (bandsResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(bandsResourceParameters));
            }

            if (string.IsNullOrWhiteSpace(bandsResourceParameters.MainGenre) &&
                string.IsNullOrWhiteSpace(bandsResourceParameters.SearchQuery))
            {
                return(GetBands());
            }

            var collection = _context.Bands as IQueryable <Band>;



            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.MainGenre))
            {
                var mainGenre = bandsResourceParameters.MainGenre.Trim();
                collection = collection.Where(b => b.MainGenre == mainGenre);
            }

            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.SearchQuery))
            {
                var searchQuery = bandsResourceParameters.SearchQuery.Trim();
                collection = collection.Where(b => b.Name.Contains(searchQuery));
            }

            return(collection.ToList());
        }
        public PagedList <Band> GetBands(BandsResourceParameters parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            IQueryable <Band> collection = _context.Bands as IQueryable <Band>;

            if (!string.IsNullOrWhiteSpace(parameters.MainGenre))
            {
                string mainGenre = parameters.MainGenre.Trim();
                collection = collection.Where(b => b.MainGenre == mainGenre);
            }

            if (!string.IsNullOrWhiteSpace(parameters.SearchQuery))
            {
                string searchQuery = parameters.SearchQuery.Trim();
                collection = collection.Where(b => b.Name.ToLower().Contains(searchQuery));
            }


            if (!string.IsNullOrWhiteSpace(parameters.OrderBy))
            {
                Dictionary <string, PropertyMappingValue> bandPropertyMappingDictionary = _propertyMappingService.GetPropertyMapping <BandDto, Band>();
                collection = collection.ApplySort(parameters.OrderBy, bandPropertyMappingDictionary);
            }

            return(PagedList <Band> .Create(collection, parameters.PageNumber, parameters.PageSize));
        }
示例#5
0
        public IEnumerable <Band> GetAllBands(//string Genre, string Search
            BandsResourceParameters bandsResourceParameters)
        {
            if (bandsResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(bandsResourceParameters));
            }

            if (string.IsNullOrWhiteSpace(bandsResourceParameters.Genre) &&
                string.IsNullOrWhiteSpace(bandsResourceParameters.Search))
            {
                GetAllBands();
            }

            //Saving all bands in this var so changes can be done in this var and not whole database set.
            var collectionOfAllBands = _db.Bands as IQueryable <Band>;

            //Filter according to Genre.
            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.Genre))
            {
                var Genre1 = bandsResourceParameters.Genre.Trim(); //Remove whitespaces and format the string to make search/filter easy.
                collectionOfAllBands = collectionOfAllBands.Where(
                    c => c.Genre == Genre1);
            }

            //Search according to Search query provided.
            //Whatever band has the characters provided in Search string will be returned.
            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.Search))
            {
                var Search1 = bandsResourceParameters.Search.Trim();
                collectionOfAllBands = collectionOfAllBands.Where(
                    c => c.Name.Contains(Search1));
            }
            return(collectionOfAllBands.ToList());
        }
示例#6
0
        public IActionResult GetBands([FromQuery] BandsResourceParameters parameters)
        {
            if (!_propertyMappingService.ValidMappingExists <BandDto, Band>(parameters.OrderBy))
            {
                return(BadRequest());
            }

            if (!_propertyValidationService.HasValidProperties <BandDto>(parameters.Fields))
            {
                return(BadRequest());
            }

            PagedList <Band> bands = _bandAlbumRepository.GetBands(parameters);

            string previousPageLink = bands.HasPrevious ? CreateBandsUri(parameters, UriType.PreviousPage) : null;
            string nextPageLink     = bands.hasNext ? CreateBandsUri(parameters, UriType.NextPage) : null;

            var metaData = new
            {
                totalCount  = bands.TotalCount,
                pageSize    = bands.PageSize,
                currentPage = bands.CurrentPage,
                totalPages  = bands.TotalPages,
                previousPageLink,
                nextPageLink
            };

            Response.Headers.Add("Pagination", JsonSerializer.Serialize(metaData));

            return(Ok(_mapper.Map <IEnumerable <BandDto> >(bands).ShapeData(parameters.Fields)));
        }
示例#7
0
        public ActionResult <IEnumerable <BandDto> > GetBands([FromQuery] BandsResourceParameters bandsResourceParameters)
        {
            var bandsFromRepo = _bandAlbumRepository.GetBands(bandsResourceParameters);


            var previousPageLink = bandsFromRepo.HasPrevious ?
                                   CreateBandsUri(bandsResourceParameters, UriType.PreviousPage) : null;

            var nextPageLink = bandsFromRepo.HasNext ?
                               CreateBandsUri(bandsResourceParameters, UriType.NextPage) : null;

            var metaData = new
            {
                totalCount       = bandsFromRepo.TotalCount,
                pageSize         = bandsFromRepo.PageSize,
                currentPage      = bandsFromRepo.CurrentPage,
                totalPages       = bandsFromRepo.TotalPages,
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink
            };

            Response.Headers.Add("Pagination", JsonSerializer.Serialize(metaData));


            return(Ok(_mapper.Map <IEnumerable <BandDto> >(bandsFromRepo)));
        }
示例#8
0
        private string CreateBandsUri(BandsResourceParameters bandsResourceParameters, UriType uriType)
        {
            switch (uriType)
            {
            case UriType.PreviousPage:
                return(Url.Link("GetBands", new
                {
                    pageNumber = bandsResourceParameters.PageNumber - 1,
                    pageSize = bandsResourceParameters.PageSize,
                    mainGenre = bandsResourceParameters.MainGenre,
                    searchQuery = bandsResourceParameters.SearchQuery
                }));

            case UriType.NextPage:
                return(Url.Link("GetBands", new
                {
                    pageNumber = bandsResourceParameters.PageNumber + 1,
                    pageSize = bandsResourceParameters.PageSize,
                    mainGenre = bandsResourceParameters.MainGenre,
                    searchQuery = bandsResourceParameters.SearchQuery
                }));

            default:
                return(Url.Link("GetBands", new
                {
                    pageNumber = bandsResourceParameters.PageNumber + 1,
                    pageSize = bandsResourceParameters.PageSize,
                    mainGenre = bandsResourceParameters.MainGenre,
                    searchQuery = bandsResourceParameters.SearchQuery
                }));
            }
        }
示例#9
0
        private IEnumerable <LinkDto> CreateLinksForBands(BandsResourceParameters bandsResourceParameters, bool hasNext, bool hasPrevious)
        {
            var links = new List <LinkDto>();

            links.Add(
                new LinkDto(CreateBandsUri(bandsResourceParameters, UriType.Current),
                            "self",
                            "GET"));

            if (hasNext)
            {
                links.Add(
                    new LinkDto(CreateBandsUri(bandsResourceParameters, UriType.NextPage),
                                "nextPage",
                                "GET"));
            }

            if (hasPrevious)
            {
                links.Add(
                    new LinkDto(CreateBandsUri(bandsResourceParameters, UriType.PreviousPage),
                                "previousPage",
                                "GET"));
            }

            return(links);
        }
        public PagedList <Band> GetBands(BandsResourceParameters bandsResourceParameters)
        {
            if (bandsResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(bandsResourceParameters));
            }

            var collection = _context.Bands as IQueryable <Band>;

            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.MainGenre))
            {
                var mainGenre = bandsResourceParameters.MainGenre.Trim();
                collection = collection.Where(b => b.MainGenre == mainGenre);
            }

            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.SearchQuery))
            {
                var searchQuery = bandsResourceParameters.SearchQuery.Trim();
                collection = collection.Where(b => b.Name.Contains(searchQuery));
            }

            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.OrderBy))
            {
                var bandPropertyMappingDictionary =
                    _propertyMappingService.GetPropertyMapping <Models.BandDto, Entities.Band>();

                collection = collection.ApplySort(bandsResourceParameters.OrderBy,
                                                  bandPropertyMappingDictionary);
            }

            return(PagedList <Band> .Create(collection, bandsResourceParameters.PageNumber, bandsResourceParameters.PageSize));
        }
示例#11
0
        public ActionResult <IEnumerable <BandDto> > GetBands([FromQuery] BandsResourceParameters bandsResourceParameters)
        {
            var bandRepo = _bandAlbumRepository.GetBands(bandsResourceParameters);
            var bandsDto = new List <BandDto>();

            return(Ok(_mapper.Map <IEnumerable <BandDto> >(bandRepo)));
        }
示例#12
0
        [HttpHead] //Displays information that might be useful for the user.
        //[FromQuery] is necessary to be mentioned when passing arguments that will come from a query
        //String and other basic types are automatically understood by application but complex types
        //Like objects aren't and FromQuery should be mentioned necessarily otherwise program will assume that the
        //argument will be passed from the body.

        public ActionResult <IEnumerable <BandDTO> > GetAllBands(
            //[FromQuery]string Genre, [FromQuery]string Search
            [FromQuery] BandsResourceParameters bandsResourceParameters)
        {
            var bandsFromRepo = _bandAlbumRepository.GetAllBands(bandsResourceParameters);

            return(Ok(_mapper.Map <IEnumerable <BandDTO> >(bandsFromRepo)));
        }
示例#13
0
        public IActionResult GetBands(
            [FromQuery] BandsResourceParameters bandsResourceParameters)
        {
            if (!_propertyMappingService.ValidMappingExists <BandDto, Entities.Band>
                    (bandsResourceParameters.OrderBy))
            {
                return(BadRequest());
            }

            if (!_propertyValidationService.HasValidProperties <BandDto>
                    (bandsResourceParameters.Fields))
            {
                return(BadRequest());
            }

            var bandsFromRepo = _bandAlbumRepository.GetBands(bandsResourceParameters);

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

            Response.Headers.Add("Pagination", JsonSerializer.Serialize(metaData));

            var links       = CreateLinksForBands(bandsResourceParameters, bandsFromRepo.HasNext, bandsFromRepo.HasPrevious);
            var shapedBands = _mapper.Map <IEnumerable <BandDto> >(bandsFromRepo)
                              .ShapeData(bandsResourceParameters.Fields);

            var shapedBandsWithLinks = shapedBands.Select(band =>
            {
                var bandAsDictionary = band as IDictionary <string, object>;
                var bandLinks        = CreateLinksForBand((Guid)bandAsDictionary["Id"], null);
                bandAsDictionary.Add("links", bandLinks);
                return(bandAsDictionary);
            });

            var linkedCollectionResource = new
            {
                value = shapedBandsWithLinks,
                links
            };

            return(Ok(linkedCollectionResource));
        }
示例#14
0
        public IEnumerable <Band> GetBands(BandsResourceParameters bandsResourceParameters)
        {
            if (string.IsNullOrWhiteSpace(bandsResourceParameters.MainGenre) && string.IsNullOrWhiteSpace(bandsResourceParameters.SearchQuery))
            {
                return(GetBands());
            }

            var collection = _context.Bands as IQueryable <Band>;

            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.MainGenre))
            {
                collection = collection.Where(b => b.MainGenre == bandsResourceParameters.MainGenre.Trim());
            }
            if (!string.IsNullOrWhiteSpace(bandsResourceParameters.SearchQuery))
            {
                collection = collection.Where(b => b.Name.Contains(bandsResourceParameters.SearchQuery));
            }
            return(collection.ToList());
        }
示例#15
0
        public ActionResult <IEnumerable <BandDTO> > GetBands([FromQuery] BandsResourceParameters bandsResourceParameters)
        {
            var bandsFromRepo = _bandAlbumRepository.GetBands(bandsResourceParameters);

            return(Ok(_mapper.Map <IEnumerable <BandDTO> >(bandsFromRepo)));

            //throw new Exception("testing exceptions");

            //var bandsDTO = new List<BandDTO>();

            //foreach(var band in bandsFromRepo)
            //{
            //    bandsDTO.Add(new BandDTO()
            //    {
            //        Id = band.Id,
            //        Name = band.Name,
            //        MainGenre = band.MainGenre,
            //        FoundedYearsAgo = $"{band.Founded.ToString("yyyy")} ({band.Founded.GetYearsAgo()} years ago)"
            //    });
            //}
            //return Ok(BandDTO);
        }
示例#16
0
        public ActionResult <IEnumerable <Band_Dto> > GetBands([FromQuery] BandsResourceParameters bandsResourceParameters)
        {
            var bandsFromRepo = _bandAlbumRepository.GetBands(bandsResourceParameters);

            //var bandsDto = new List<Band_Dto>();

            //foreach (var b in bandsFromRepo)
            //{
            //    bandsDto.Add(new Band_Dto()
            //    {
            //        Id = b.Id,
            //        Name = b.Name,
            //        MainGenre = b.MainGenre,
            //        FoundedYearsAgo = $"{b.Founded.ToString("yyyy")} ({b.Founded.GetYearsAgo()} years ago)"

            //    });
            //}

            //return new JsonResult(bandsFromRepo);
            //return new JsonResult(bandsDto);

            return(Ok(_mapper.Map <IEnumerable <Band_Dto> >(bandsFromRepo)));
        }
示例#17
0
        public PagedList <Band> GetBands(BandsResourceParameters bandsResourceParameter)
        {
            if (bandsResourceParameter == null)
            {
                throw new ArgumentException(nameof(bandsResourceParameter));
            }
            var mainGenre   = bandsResourceParameter.MainGenre;
            var searchQuery = bandsResourceParameter.SearchQuery;
            int pageNumber  = bandsResourceParameter.PageNumber;
            int pageSize    = bandsResourceParameter.PageSize;
            var collection  = _context.Bands as IQueryable <Band>;

            if (!string.IsNullOrWhiteSpace(mainGenre))
            {
                mainGenre  = mainGenre.Trim();
                collection = collection.Where(b => b.MainGenre.ToUpper() == mainGenre.ToUpper());
            }
            if (!string.IsNullOrWhiteSpace(searchQuery))
            {
                searchQuery = searchQuery.Trim();
                collection  = collection.Where(b => b.Name.Contains(searchQuery));
            }
            return(PagedList <Band> .Create(collection, pageNumber, pageSize));
        }