Beispiel #1
0
        public async Task <Pagination <MovieDto> > GetMoviesAsync(MovieFilterDto dto, int pageNumber, int pageSize)
        {
            Pagination <Movie> moviePagination;

            moviePagination = await _repository.GetIncludingCastWithPaginationAsync(null, pageNumber, pageSize);

            return(new Pagination <MovieDto>(moviePagination.Items.Select(x => new MovieDto(x)), moviePagination.TotalItemCount, moviePagination.PageSize, moviePagination.CurrentPage));
        }
Beispiel #2
0
        public async Task <IActionResult> AllMovies([FromQuery] MovieFilterDto filtersDto, int pageSize = 10, int pageNumber = 1)
        {
            var userLogin = User.FindFirst(ClaimTypes.Email).Value;

            _logger.LogInformation(string.Format($"{nameof(AllMovies)} iniciado pelo usuário {userLogin}"));

            var result = await _movieService.AllMovies(filtersDto, pageSize, pageNumber);

            _logger.LogInformation(string.Format($"{nameof(AllMovies)} finalizado."));
            return(Ok(result));
        }
Beispiel #3
0
        public async Task <PaginatedList <MovieForDetailedDto> > GetAllPaginated(MovieFilterDto filtersDto, int pageSize, int pageNumber)
        {
            var query = DbContext.Movies.AsNoTracking();

            if (!string.IsNullOrEmpty(filtersDto.Director))
            {
                query = query.Where(m => m.Director.ToLower().Contains(filtersDto.Director.ToLower()));
            }

            if (!string.IsNullOrEmpty(filtersDto.Genre))
            {
                query = query.Where(m => m.Genre.ToLower().Contains(filtersDto.Genre.ToLower()));
            }

            if (!string.IsNullOrEmpty(filtersDto.Name))
            {
                query = query.Where(m => m.Name.ToLower().Contains(filtersDto.Name.ToLower()));
            }

            if (!string.IsNullOrEmpty(filtersDto.Actor))
            {
                query = query.Where(m =>
                                    m.MovieActors.Any(ma => ma.Actor.Name.ToLower().Contains(filtersDto.Actor.ToLower())));
            }

            query = query.OrderByDescending(m => (decimal)m.Votes.Sum(v => v.Value) / m.Votes.Count).ThenBy(m => m.Name);

            var result = query.Select(m => new MovieForDetailedDto
            {
                Director = m.Director,
                Genre    = m.Genre,
                Name     = m.Name,
                Actors   = m.MovieActors.Select(ma => new ActorForDetailedDto
                {
                    Name = ma.Actor.Name
                }),
                AverageVote = (decimal)m.Votes.Sum(v => v.Value) / m.Votes.Count
            });

            return(await new PaginatedList <MovieForDetailedDto>().CreateAsync(result, pageNumber, pageSize));
        }
Beispiel #4
0
        public async Task <ActionResult <IEnumerable <MovieDto> > > Filter([FromQuery] MovieFilterDto movieFilterDto)
        {
            var queryMovies = _context.Movies.AsQueryable();

            if (!string.IsNullOrEmpty(movieFilterDto.Title))
            {
                queryMovies = queryMovies.Where(m => m.Title.Contains(movieFilterDto.Title));
            }

            if (movieFilterDto.InTheaters)
            {
                queryMovies = queryMovies.Where(m => m.InTheaters);
            }

            if (movieFilterDto.NextReleases)
            {
                queryMovies = queryMovies.Where(m => m.ReleaseDate > DateTime.Today);
            }

            if (movieFilterDto.GenreId != 0)
            {
                queryMovies = queryMovies
                              .Where(m => m.MoviesGenres
                                     .Select(g => g.GenreId)
                                     .Contains(movieFilterDto.GenreId)
                                     );
            }

            if (!string.IsNullOrEmpty(movieFilterDto.OrderField))
            {
                string orderType = movieFilterDto.AscOrder ? "Ascending" : "Descending";
                queryMovies = queryMovies.OrderBy($"{movieFilterDto.OrderField} {orderType}");
            }

            await HttpContext.InsertPaginationParameter(queryMovies, movieFilterDto.RecordPerPage);

            var movies = await queryMovies.Paginate(movieFilterDto.Pagination).ToListAsync();

            return(_mapper.Map <List <MovieDto> >(movies));
        }
Beispiel #5
0
        public async Task <Result <PaginatedList <MovieForDetailedDto> > > AllMovies(MovieFilterDto filtersDto, int pageSize, int pageNumber)
        {
            var result = await _movieRepository.GetAllPaginated(filtersDto, pageSize, pageNumber);

            return(Result <PaginatedList <MovieForDetailedDto> > .CreateResult(result));
        }
Beispiel #6
0
        public async Task <IActionResult> GetMovieByFilters([FromBody] MovieFilterDto dto, int pageNumber = 1, int pageSize = 10)
        {
            var movies = await _movieService.GetMoviesAsync(dto, pageNumber, pageSize);

            return(Ok(movies));
        }