Пример #1
0
        public async Task <IRestResponse <List <Review> > > GetReviews(ReviewsResourceParameters parameters)
        {
            RestRequest restRequest = new RestRequest(Method.GET);

            restRequest.AddHeader("Accept", "application/json");

            if (!string.IsNullOrEmpty(parameters.ResourceUrl))
            {
                restRequest.Resource = parameters.ResourceUrl;
            }
            else
            {
                restRequest.AddParameter("pageNumber", parameters.PageNumber);
                restRequest.AddParameter("pageSize", parameters.PageSize);
            }

            if (!string.IsNullOrEmpty(parameters.MovieGenre))
            {
                restRequest.AddParameter("movieGenre", parameters.MovieGenre);
            }

            if (!string.IsNullOrEmpty(parameters.SortBy))
            {
                restRequest.AddParameter("sortBy", parameters.SortBy);
            }

            return(await _restClient.ExecuteTaskAsync <List <Review> >(restRequest));
        }
Пример #2
0
        public async Task <List <Review> > GetReviews(ReviewsResourceParameters reviewsResourceParameters)
        {
            var reviews = _dbContext.Reviews
                          .Include(r => r.Movie)
                          .Include(r => r.Reviewer)
                          .AsQueryable();

            // Filter by MovieId
            if (reviewsResourceParameters.MovieId != null)
            {
                reviews = reviews.Where(r => r.MovieId == reviewsResourceParameters.MovieId);
            }

            // Filter by ReviewerId
            if (reviewsResourceParameters.ReviewerId != null)
            {
                reviews = reviews.Where(r => r.ReviewerId == reviewsResourceParameters.ReviewerId);
            }

            // Filter by MovieGenre
            if (!string.IsNullOrEmpty(reviewsResourceParameters.MovieGenre))
            {
                reviews = reviews.Where(
                    r => r.Movie.Genre == reviewsResourceParameters.MovieGenre.Trim());
            }

            // Apply sorting
            reviews = await ApplySorting(reviews, reviewsResourceParameters.SortBy);

            return(await reviews.ToListAsync());
        }
Пример #3
0
        private IEnumerable <ReturnModelLink> CreateLinksForReviews(
            ReviewsResourceParameters reviewsResourceParameters,
            bool hasNext, bool hasPrevious)
        {
            var links = new List <ReturnModelLink>();

            links.Add(new ReturnModelLink(CreateReviewsResourceUri(reviewsResourceParameters,
                                                                   ResourceUriType.Current),
                                          "self", "GET"));

            if (hasNext)
            {
                links.Add(new ReturnModelLink(CreateReviewsResourceUri(reviewsResourceParameters,
                                                                       ResourceUriType.NextPage),
                                              "nextPage", "GET"));
            }

            if (hasPrevious)
            {
                links.Add(new ReturnModelLink(CreateReviewsResourceUri(reviewsResourceParameters,
                                                                       ResourceUriType.PreviousPage),
                                              "previousPage", "GET"));
            }

            return(links);
        }
Пример #4
0
        public async Task <IActionResult> GetReviews([FromQuery] ReviewsResourceParameters reviewsResourceParameters)
        {
            if (!_typeHelperService.TypeHasProperties <ReviewReturnModel>(
                    reviewsResourceParameters.Fields))
            {
                return(BadRequest());
            }

            var reviews = await _reviewData.GetReviews(reviewsResourceParameters);

            var returnModel = Mapper.Map <List <ReviewReturnModel> >(reviews);

            var pagedReturnModel = await PagedList <ReviewReturnModel> .Create(returnModel,
                                                                               reviewsResourceParameters.PageNumber,
                                                                               reviewsResourceParameters.PageSize);

            var previousPageLink = pagedReturnModel.HasPrevious ?
                                   CreateReviewsResourceUri(reviewsResourceParameters,
                                                            ResourceUriType.PreviousPage) : null;

            var nextPageLink = pagedReturnModel.HasNext ?
                               CreateReviewsResourceUri(reviewsResourceParameters,
                                                        ResourceUriType.NextPage) : null;

            var paginationMetadata = new
            {
                totalCount       = pagedReturnModel.TotalCount,
                pageSize         = pagedReturnModel.PageSize,
                currentPage      = pagedReturnModel.CurrentPage,
                totalPages       = pagedReturnModel.TotalPages,
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink
            };

            Response.Headers.Add("X-Pagination",
                                 Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));

            var links = CreateLinksForReviews(reviewsResourceParameters,
                                              pagedReturnModel.HasNext, pagedReturnModel.HasPrevious);

            var shapedReturnModel = pagedReturnModel.AsEnumerable().ShapeData(reviewsResourceParameters.Fields);

            var shapedReturnModelWithLinks = shapedReturnModel.Select(review =>
            {
                var reviewAsDictionary = review as IDictionary <string, object>;
                var reviewLinks        = CreateLinksForReview(
                    (int)reviewAsDictionary["Id"], reviewsResourceParameters.Fields);
                reviewAsDictionary.Add("links", reviewLinks);

                return(reviewAsDictionary);
            });

            return(Ok(shapedReturnModelWithLinks));
        }
Пример #5
0
        public async Task <IActionResult> ReviewsAjax(ReviewsResourceParameters parameters)
        {
            var response = await _reviewData.GetReviews(parameters);

            if (!response.IsSuccessful)
            {
                return(View("Error", new ErrorViewModel(response.ErrorMessage,
                                                        response.ErrorException.ToString())));
            }

            Response.Headers.Add("X-Pagination", response.Headers
                                 .FirstOrDefault(h => h.Name == "X-Pagination").Value.ToString());

            return(PartialView("_Reviews", response.Data));
        }
Пример #6
0
        public async Task <IActionResult> Reviews(ReviewsResourceParameters parameters)
        {
            var response = await _reviewData.GetReviews(parameters);

            if (!response.IsSuccessful)
            {
                return(View("Error", new ErrorViewModel(response.ErrorMessage,
                                                        response.ErrorException.ToString())));
            }

            ViewBag.PaginationMetadata = JsonConvert.DeserializeObject(response.Headers
                                                                       .FirstOrDefault(h => h.Name == "X-Pagination").Value.ToString());

            ViewBag.MovieGenres = new MovieGenres(parameters.MovieGenre);

            return(View(response.Data));
        }
Пример #7
0
        private string CreateReviewsResourceUri(ReviewsResourceParameters reviewsResourceParameters,
                                                ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(_urlHelper.Link("GetReviews", new
                {
                    fields = reviewsResourceParameters.Fields,
                    sortBy = reviewsResourceParameters.SortBy,
                    movieGenre = reviewsResourceParameters.MovieGenre,
                    pageNumber = reviewsResourceParameters.PageNumber - 1,
                    pageSize = reviewsResourceParameters.PageSize
                }));

            case ResourceUriType.NextPage:
                return(_urlHelper.Link("GetReviews", new
                {
                    fields = reviewsResourceParameters.Fields,
                    sortBy = reviewsResourceParameters.SortBy,
                    movieGenre = reviewsResourceParameters.MovieGenre,
                    pageNumber = reviewsResourceParameters.PageNumber + 1,
                    pageSize = reviewsResourceParameters.PageSize
                }));

            case ResourceUriType.Current:
            default:
                return(_urlHelper.Link("GetReviews", new
                {
                    fields = reviewsResourceParameters.Fields,
                    sortBy = reviewsResourceParameters.SortBy,
                    movieGenre = reviewsResourceParameters.MovieGenre,
                    pageNumber = reviewsResourceParameters.PageNumber,
                    pageSize = reviewsResourceParameters.PageSize
                }));
            }
        }