public int?getReviewPage(int UserId, int PageNumber, int PageSize, ReviewSortState sortState, string titleName) { if (titleName == null) { return(null); } var reviewsList = _mapper.Map <IEnumerable <Review>, IEnumerable <ReviewDTO> >(_reviewsRepository.GetAllReviewsByUserId(UserId)); reviewsList = sortQuery(reviewsList, sortState); var foundElement = reviewsList.FirstOrDefault(s => s.ReviewTitle.Contains(titleName)); if (foundElement == null) { return(null); } int index = reviewsList.IndexOf(foundElement) + 1; if (index <= PageSize) { return(1); } var remaining = ((double)index / (double)PageSize); return((int)Math.Round(remaining, 0, MidpointRounding.AwayFromZero)); }
IEnumerable <ReviewDTO> sortQuery(IEnumerable <ReviewDTO> reviewsList, ReviewSortState sortState) { return(reviewsList = sortState switch { ReviewSortState.NameDesc => reviewsList.OrderByDescending(s => s.ReviewTitle), ReviewSortState.RatingAsc => reviewsList.OrderBy(s => getFilmRating(s)), ReviewSortState.RatingDesc => reviewsList.OrderByDescending(s => getFilmRating(s)), ReviewSortState.YearAsc => reviewsList.OrderBy(s => s.PublishTime), ReviewSortState.YearDesc => reviewsList.OrderByDescending(s => s.PublishTime), _ => reviewsList.OrderBy(s => s.ReviewTitle), });
IEnumerable <ReviewDTO> paginateQuery(IEnumerable <ReviewDTO> reviewsList, ReviewSortState sortState, int PageNumber, int PageSize) { reviewsList = sortQuery(reviewsList, sortState); var reviewsListPaged = reviewsList.Skip((PageNumber - 1) * PageSize) .Take(PageSize); if (reviewsListPaged.Count() == 0) { PageNumber = 1; reviewsListPaged = reviewsList.Skip((PageNumber - 1) * PageSize) .Take(PageSize); } return(reviewsListPaged); }
public Entities.Models.IPagedResponse <ReviewDTO> GetReviews(int UserId, int PageNumber, int PageSize, ReviewSortState sortState) { var reviewsList = _mapper.Map <IEnumerable <Review>, IEnumerable <ReviewDTO> >(_reviewsRepository.GetAllReviewsByUserId(UserId)); foreach (var item in reviewsList) { if (item.ContentType == ContentType.Movie) { item.FilmImage = _moviesService.GetMovieById(item.FilmId).ImageSource; } else if (item.ContentType == ContentType.Serial) { item.FilmImage = _serialsService.GetSerialById(item.FilmId).PosterImageSource; } } var reviewsListPaged = paginateQuery(reviewsList, sortState, PageNumber, PageSize); return(new Entities.Models.IPagedResponse <ReviewDTO>(reviewsListPaged) { PageSize = PageSize, TotalCount = reviewsList.Count(), PageNumber = PageNumber, Data = reviewsListPaged }); }