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