Exemple #1
0
        private string CreateVideosResourceUri(VideoResourceParameters parameters, ResourceUriType type, string user)
        {
            switch (type)
            {
            case ResourceUriType.previousPage:
                return(urlHelper.Link("GetVideos", new
                {
                    username = user,
                    parameters = new VideoResourceParameters
                    {
                        Fields = parameters.Fields,
                        OrderBy = parameters.OrderBy,
                        searchQuery = parameters.searchQuery,
                        Title = parameters.Title,
                        PageNumber = parameters.pageNumber - 1,
                        PageSize = parameters.PageSize
                    }
                }));

            case ResourceUriType.nextPage:
                return(urlHelper.Link("GetVideos", new
                {
                    username = user,
                    parameters = new VideoResourceParameters
                    {
                        Fields = parameters.Fields,
                        OrderBy = parameters.OrderBy,
                        searchQuery = parameters.searchQuery,
                        Title = parameters.Title,
                        PageNumber = parameters.pageNumber + 1,
                        PageSize = parameters.PageSize
                    }
                }));

            default:

                return(urlHelper.Link("GetVideos", new
                {
                    searchQuery = parameters.searchQuery,
                    Title = parameters.Title,
                    username = user,
                    parameters = new VideoResourceParameters
                    {
                        Fields = parameters.Fields,
                        OrderBy = parameters.OrderBy,
                        searchQuery = parameters.searchQuery,
                        Title = parameters.Title,
                        PageNumber = parameters.pageNumber,
                        PageSize = parameters.PageSize
                    }
                }));
            }
        }
Exemple #2
0
        private IActionResult GetVideos(string username, [FromQuery] VideoResourceParameters parameters)
        {
            if (!typeHelperService.TypeHasProperties <VideoForDisplayDTO>(parameters.Fields))
            {
                return(BadRequest());
            }
            if (!propertyMappingService.ValidMappingExistsFor <VideoForDisplayDTO, Video>(parameters.OrderBy))
            {
                return(BadRequest());
            }
            if (string.IsNullOrEmpty(username))
            {
                return(BadRequest());
            }


            var videos = videoRepository.GetEntities(username, parameters);

            if (videos == null)
            {
                return(NotFound());
            }

            var previousLink = videos.HasPrevious ? CreateVideosResourceUri(parameters, ResourceUriType.previousPage, username) : null;
            var nextLink     = videos.HasNext ? CreateVideosResourceUri(parameters, ResourceUriType.nextPage, username) : null;

            var paginatioMetadata = new
            {
                totalCount       = videos.TotalCount,
                pageSize         = videos.PageSize,
                currentPage      = videos.CurrentPage,
                totalPages       = videos.TotalPages,
                previousPageLink = previousLink,
                nextPageLink     = nextLink
            };

            Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginatioMetadata));
            var videosToReturn = Mapper.Map <IEnumerable <VideoForDisplayDTO> >(videos);
            var links          = CreateLinksForVideos(username, parameters, videos.HasNext, videos.HasPrevious);

            videosToReturn = videosToReturn.Select(v =>
            {
                var videoWithLinks = CreateLinksForVideo(v);
                return(videoWithLinks);
            });
            var result = videosToReturn.ShapeData(parameters.Fields);

            return(Ok(result));
        }
Exemple #3
0
        private IEnumerable <LinkDTO> CreateLinksForVideos(string user, VideoResourceParameters parameters, bool hasNext, bool hasPrevious)
        {
            var links = new List <LinkDTO>();

            links.Add(new LinkDTO(CreateVideosResourceUri(parameters, ResourceUriType.Current, user), "self", "GET"));
            if (hasNext)
            {
                links.Add(new LinkDTO(CreateVideosResourceUri(parameters, ResourceUriType.nextPage, user), "nextPage", "GET"));
            }
            if (hasPrevious)
            {
                links.Add(new LinkDTO(CreateVideosResourceUri(parameters, ResourceUriType.previousPage, user), "nextPage", "GET"));
            }
            return(links);
        }
        public PageList <Video> GetEntities(string user, VideoResourceParameters parameters)
        {
            var collectionBeforePaging = context.Videos.OrderBy(x => x.UploadedDate).AsQueryable();

            collectionBeforePaging = context.Videos.ApplySort(parameters.OrderBy, propertyMappingService.GetPropertyMapping <VideoForDisplayDTO, Video>());
            if (!string.IsNullOrEmpty(parameters.Title))
            {
                var filterClause = parameters.Title.Trim().ToLowerInvariant();
                collectionBeforePaging = collectionBeforePaging.Where(x => x.Title.ToLowerInvariant() == filterClause);
            }

            if (!string.IsNullOrEmpty(parameters.searchQuery))
            {
                var searchQuery = parameters.searchQuery.Trim().ToLowerInvariant();
                collectionBeforePaging = collectionBeforePaging.Where(a => a.Properties.ToLowerInvariant().Contains(searchQuery) || a.Title.ToLowerInvariant().Contains(searchQuery) || a.Username.Contains(searchQuery));
            }
            return(PageList <Video> .Create(collectionBeforePaging, parameters.pageNumber, parameters.PageSize));

            // return context.Videos.Where(x => x.Username == user).OrderBy(x => x.UploadedDate).Skip(parameters.PageSize * (parameters.pageNumber - 1)).Take(parameters.PageSize).ToList();
        }
Exemple #5
0
        public IActionResult GetVideosWithCustomeMedia(string username, VideoResourceParameters parameters, [FromHeader(Name = "Accept")] string mediaType)
        {
            if (!typeHelperService.TypeHasProperties <VideoForDisplayDTO>(parameters.Fields))
            {
                return(BadRequest());
            }
            if (!propertyMappingService.ValidMappingExistsFor <VideoForDisplayDTO, Video>(parameters.OrderBy))
            {
                return(BadRequest());
            }
            if (string.IsNullOrEmpty(username))
            {
                return(BadRequest());
            }


            var videos = videoRepository.GetEntities(username, parameters);

            if (videos == null)
            {
                return(NotFound());
            }



            var paginatioMetadata = new
            {
                totalCount  = videos.TotalCount,
                pageSize    = videos.PageSize,
                currentPage = videos.CurrentPage,
                totalPages  = videos.TotalPages
            };

            Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginatioMetadata));
            var videosToReturn = Mapper.Map <IEnumerable <VideoForDisplayDTO> >(videos);

            if (mediaType == "application/vnd.ak.hateoas+json")
            {
                var linksForVideos = CreateLinksForVideos(username, parameters, videos.HasNext, videos.HasPrevious);


                var result = videosToReturn.ShapeData(parameters.Fields);
                result.Select(video =>
                {
                    var videoAsDictionary = video as IDictionary <string, object>;
                    var videoLinks        = CreateLinksForVideoById((int)videoAsDictionary["VideoId"], parameters.Fields);
                    videoAsDictionary.Add("links", videoLinks);
                    return(videoAsDictionary);
                });
                var linkedCollectionResource = new
                {
                    value = result,
                    links = linksForVideos
                };
                return(Ok(linkedCollectionResource));
            }
            else
            {
                var previousLink = videos.HasPrevious ? CreateVideosResourceUri(parameters, ResourceUriType.previousPage, username) : null;
                var nextLink     = videos.HasNext ? CreateVideosResourceUri(parameters, ResourceUriType.nextPage, username) : null;

                var newpaginatioMetadata = new
                {
                    totalCount       = videos.TotalCount,
                    pageSize         = videos.PageSize,
                    currentPage      = videos.CurrentPage,
                    totalPages       = videos.TotalPages,
                    previousPageLink = previousLink,
                    nextPageLink     = nextLink
                };

                Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(newpaginatioMetadata));
                videosToReturn = Mapper.Map <IEnumerable <VideoForDisplayDTO> >(videos);
                var links = CreateLinksForVideos(username, parameters, videos.HasNext, videos.HasPrevious);

                videosToReturn = videosToReturn.Select(v =>
                {
                    var videoWithLinks = CreateLinksForVideo(v);
                    return(videoWithLinks);
                });
                var result = videosToReturn.ShapeData(parameters.Fields);

                return(Ok(result));
            }
        }