Beispiel #1
0
        public async Task <IActionResult> GetFilter([FromQuery] MovieDtoFilter filter)
        {
            var result = await _movieService.Filter(filter);

            if (result.IsSuccess == false)
            {
                return(BadRequest(result));
            }

            return(Ok(result));
        }
Beispiel #2
0
        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));
        }