public FilmWithGenresAndWatchedByUsersFilterPaginatedSpecification(FilmFilterDto filmFilter)
            : base(x => (string.IsNullOrWhiteSpace(filmFilter.Title) || x.Title.ToLower().Contains(filmFilter.Title.ToLower())) &&
                   (filmFilter.Ids.Count == 0 || filmFilter.Ids.Contains(x.Id)) &&
                   (filmFilter.FilmType == null || x.TypeId == filmFilter.FilmType) &&
                   (filmFilter.GenreId == null || x.Genres.Select(x => x.GenreId).Contains((int)filmFilter.GenreId)))
        {
            if (filmFilter.OrderByDescending == nameof(Domain.Entities.Film.Rating))
            {
                ApplyOrderByDescending(x => x.Rating);
            }

            if (filmFilter.OrderByDescending == nameof(Domain.Entities.Film.Year))
            {
                ApplyOrderByDescending(x => x.Year);
            }

            ApplyPaging(filmFilter.Skip, filmFilter.Take, filmFilter.PageNumber);

            AddInclude($"{nameof(Domain.Entities.Film.WatchedByUsers)}");
            AddInclude($"{nameof(Domain.Entities.Film.Genres)}.{nameof(Domain.Entities.FilmGenre.Genre)}");
        }
Ejemplo n.º 2
0
        public async Task <IEnumerable <FilmForListDto> > GetAll(FilmFilterDto filmFilter)
        {
            var films = await _uow.Repository <Film>().FindAsyncWithPagination(new FilmWithGenresAndWatchedByUsersFilterPaginatedSpecification(filmFilter));

            _context.HttpContext.Response.AddPagination(films.CurrentPage, films.PageSize, films.TotalCount, films.TotalPages);

            var filmsToReturn = _mapper.Map <IEnumerable <FilmForListDto> >(films);

            foreach (var filmToReturn in filmsToReturn)
            {
                filmToReturn.IsWatched = IsFilmWatched(films.FirstOrDefault(x => x.Id == filmToReturn.Id));
            }

            await _photoService.IncludeMainPhoto(filmsToReturn, (int)EntityTypes.Film);

            foreach (var filmToReturn in filmsToReturn)
            {
                filmToReturn.ImdbRating = await _omdbService.GetImdbFilmRating(filmToReturn.Title);
            }

            return(filmsToReturn);
        }
Ejemplo n.º 3
0
 public async Task <IActionResult> GetAll([FromQuery] FilmFilterDto filmFilter)
 {
     return(Ok(await _filmService.GetAll(filmFilter)));
 }