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 } })); } }
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)); }
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(); }
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)); } }