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)}"); }
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); }
public async Task <IActionResult> GetAll([FromQuery] FilmFilterDto filmFilter) { return(Ok(await _filmService.GetAll(filmFilter))); }