private string CreateMoviePageURI(MovieResourceParameters parameters, PageState pageState)
        {
            urlHelper.Request = ActionContext.Request;
            switch (pageState)
            {
            case PageState.PreviousPage:
                return(urlHelper.Link("GetMoviesInPage", new
                {
                    PageNumber = parameters.PageNumber - 1,
                    PageSize = parameters.PageSize
                }));

            case PageState.NextPage:
                return(urlHelper.Link("GetMoviesInPage", new
                {
                    PageNumber = parameters.PageNumber + 1,
                    PageSize = parameters.PageSize
                }));

            case PageState.CurrentPage:
                return(urlHelper.Link("GetMoviesInPage", new
                {
                    PageNumber = parameters.PageNumber,
                    PageSize = parameters.PageSize
                }));

            default:
                return(null);
            }
        }
        public IHttpActionResult GetMovies([FromUri] MovieResourceParameters parameters)
        {
            if (parameters == null)
            {
                parameters = new MovieResourceParameters();
            }

            var page = UOW.Movies.GetMovieInPage(parameters);

            var currentLink = CreateMoviePageURI(parameters, PageState.CurrentPage);

            var previousLink = page.HasPrevious ? CreateMoviePageURI(parameters, PageState.PreviousPage) : null;

            var nextLink = page.HasNext ? CreateMoviePageURI(parameters, PageState.NextPage) : null;

            var locationHeader = new
            {
                totalCount       = page.TotalCount,
                currntPageNumber = page.CurrentPage,
                pageSize         = page.PageSize,
                countInPage      = page.PageCount,
                currentPageLink  = currentLink,
                previousPageLink = previousLink,
                nextPageLink     = nextLink,
            };
            //var movies = UOW.Movies.GetAll();

            var movieDTos = Mapper.MoviesDtosFromMovies(page);

            ActionContext.Response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new ObjectContent(typeof(IEnumerable <GetMovieDTO>), movieDTos, ActionContext.ActionDescriptor.Configuration.Formatters.JsonFormatter)
            };

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

            return(ResponseMessage(ActionContext.Response));
        }
示例#3
0
        public PageList <Movie> GetMovieInPage(MovieResourceParameters movieResource)
        {
            var orderedExtendedQuery = Entities
                                       .OrderBy(m => m.Name)
                                       .ThenBy(m => m.Rate).AsQueryable();


            if (!string.IsNullOrWhiteSpace(movieResource.Genre))
            {
                var genre = movieResource.Genre.ToLower();
                orderedExtendedQuery = orderedExtendedQuery.Where(m => m.Genre.ToLower() == genre);
            }

            if (!string.IsNullOrWhiteSpace(movieResource.rateop))
            {
                var rateopArray = movieResource.rateop.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                var opearion = rateopArray[0];
                int.TryParse(rateopArray[1], out int rate);
                if (rate > 0)
                {
                    switch (opearion)
                    {
                    case ">":
                        orderedExtendedQuery = orderedExtendedQuery
                                               .Where(m => m.Rate > rate);
                        break;

                    case "<":
                        orderedExtendedQuery = orderedExtendedQuery
                                               .Where(m => m.Rate < rate);
                        break;

                    case ">=":
                        orderedExtendedQuery = orderedExtendedQuery
                                               .Where(m => m.Rate >= rate);
                        break;

                    case "<=":
                        orderedExtendedQuery = orderedExtendedQuery
                                               .Where(m => m.Rate <= rate);
                        break;

                    case "=":
                        orderedExtendedQuery = orderedExtendedQuery
                                               .Where(m => m.Rate == rate);
                        break;
                    }
                }
            }

            if (movieResource.Rate > 0)
            {
                orderedExtendedQuery = orderedExtendedQuery.Where(m => m.Rate == movieResource.Rate);
            }

            var page = orderedExtendedQuery
                       .Skip(movieResource.PageNumber * movieResource.PageSize - (movieResource.PageSize))
                       .Take(movieResource.PageSize)
                       .ToList();

            return(new PageList <Movie>(page, Entities.Count(), movieResource.PageNumber, movieResource.PageSize));
        }