Beispiel #1
0
        public async Task <PagedList <MovieDTO> > GetMoviesAsync(SearchMovieCriteraDTO searchCriteria)
        {
            // From the test description is unclear, to me, of how the search sould be done if I specify, for example
            // title, more than one genre, and the title does not have one of the genres.
            Expression <Func <MovieDTO, bool> > titleQuery  = r => r.Title.Contains(searchCriteria.Title);
            Expression <Func <MovieDTO, bool> > genresQuery = r => r.Genres.Where(p => searchCriteria.Genres.Contains(p.Name)).Any();
            Expression <Func <MovieDTO, bool> > yearQuery   = r => r.YearOfRelease == searchCriteria.YearOfRelease;
            Expression <Func <MovieDTO, bool> > finalQuery  = null;

            if (!string.IsNullOrEmpty(searchCriteria.Title))
            {
                finalQuery = titleQuery;
            }
            if (searchCriteria.YearOfRelease > 0)
            {
                finalQuery = finalQuery != null?finalQuery.And(yearQuery) : yearQuery;
            }
            if (searchCriteria.Genres != null && searchCriteria.Genres.Length > 0)
            {
                finalQuery = finalQuery != null?finalQuery.And(genresQuery) : genresQuery;
            }
            ICollection <MovieDTO> movies = await movieDbContext.Movies.GetItemsAsync(
                mapper,
                finalQuery,
                null,
                new List <Expression <Func <IQueryable <MovieDTO>, IIncludableQueryable <MovieDTO, object> > > >() {
                item => item.Include(genre => genre.Genres).Include(rating => rating.Ratings)
            });;

            return(PagedList <MovieDTO> .ToPagedList(movies, searchCriteria.PageNumber, searchCriteria.PageSize));
        }
        public async Task MovieRepositoryTest()
        {
            SearchMovieCriteraDTO search = new SearchMovieCriteraDTO();

            search.Title = "Snatch";
            PagedList <MovieDTO> movies = await movieRepository.GetMoviesAsync(search);

            Assert.IsNotNull(movies);
        }
Beispiel #3
0
        public async Task <ActionResult <PagedList <MovieDTO> > > GetMoviesAsync([FromQuery] SearchMovieCriteraDTO searchCritera)
        {
            PagedList <MovieDTO> pagedMovies = await movieRepository.GetMoviesAsync(searchCritera);

            if (pagedMovies != null && pagedMovies.Count > 0)
            {
                return(pagedMovies);
            }
            return(NotFound());
        }