public async Task <IActionResult> GetFilter([FromQuery] MovieDtoFilter filter) { var result = await _movieService.Filter(filter); if (result.IsSuccess == false) { return(BadRequest(result)); } return(Ok(result)); }
public async Task <ServiceResponseWithPagination <List <MovieDto> > > Filter(MovieDtoFilter filter) { var query = _context.Movies.AsQueryable(); //Filter if (!string.IsNullOrWhiteSpace(filter.Title)) { query = query.Where(x => x.Title.Contains(filter.Title)); } if (filter.UpcomingReleases) { query = query.Where(x => x.InTheaters); } if (filter.UpcomingReleases) { var today = new DateTime(2020, 01, 01); query = query.Where(x => x.ReleaseDate > today); } if (filter.GenreId != 0) { query = query.Where(x => x.MoviesGenres.Select(y => y.GenreId) .Contains(filter.GenreId)); } //Ordering if (!string.IsNullOrWhiteSpace(filter.OrderingField)) { try { //nuget system.linq.dynamic.core query = query.OrderBy($"{filter.OrderingField} {(filter.AscendingOrder ? "ascending" : "descending")}"); } catch { return(ResponseResultWithPagination.Failure <List <MovieDto> >("Could not order by field: " + filter.OrderingField)); } //if (filter.OrderingField == "title") //{ // if (filter.AscendingOrder) // { // query = query.OrderBy(x => x.Title); // } // else // { // query = query.OrderByDescending(x => x.Title); // } //} } var paginationResult = await _httpContext.HttpContext .InsertPaginationParametersInResponse( query , filter.RecordsPerPage , filter.Page); var movies = await query.Paginate(filter).ToListAsync(); List <MovieDto> movieDTOs = _mapper.Map <List <MovieDto> >(movies); return(ResponseResultWithPagination.Success(movieDTOs, paginationResult)); }