private IEnumerable <LinkDto> CreateCollectorValuesLinks (CollectorValuesResourceParameters resourceParameters, bool hasNext, bool hasPrevious) { var links = new List <LinkDto> { new LinkDto(CreateCollectorValuesResourceUri (resourceParameters, ResourceUriType.Current), "self", "GET") }; if (hasNext) { links.Add(new LinkDto(CreateCollectorValuesResourceUri (resourceParameters, ResourceUriType.NextPage), "nextPage", "GET")); } if (hasPrevious) { links.Add(new LinkDto(CreateCollectorValuesResourceUri (resourceParameters, ResourceUriType.PreviousPage), "previousPage", "GET")); } return(links); }
private string CreateCollectorValuesResourceUri(CollectorValuesResourceParameters resourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetCollectorValues", new { orderBy = resourceParameters.OrderBy, fields = resourceParameters.Fields, page = resourceParameters.Page - 1, pageSize = resourceParameters.PageSize })); case ResourceUriType.NextPage: return(Url.Link("GetCollectorValues", new { orderBy = resourceParameters.OrderBy, fields = resourceParameters.Fields, page = resourceParameters.Page + 1, pageSize = resourceParameters.PageSize })); default: return(Url.Link("GetCollectorValues", new { orderBy = resourceParameters.OrderBy, fields = resourceParameters.Fields, page = resourceParameters.Page, pageSize = resourceParameters.PageSize })); } }
public async Task <PagedList <CollectorValue> > FindCollectorValues(CollectorValuesResourceParameters resourceParameters) { var collectorValues = await _unitOfWork.CollectorValues.GetAll(); collectorValues = collectorValues.OrderBy(resourceParameters.OrderBy, PropertyMappingService.CollectorValuePropertyMapping); return(PagedList <CollectorValue> .Create(collectorValues.ToList(), resourceParameters.Page, resourceParameters.PageSize)); }
public CollectorValuesControllerTests() { _mockCollectorValueService = new Mock <ICollectorValueService>(); _mockCollectorValueService.Setup(c => c.Save()).ReturnsAsync(true); _controller = new CollectorValuesController(_mockCollectorValueService.Object, _mapper); SetupTestController(_controller); _builder = new CollectorValueTestBuilder(); resourceParameters = new CollectorValuesResourceParameters(); resourceParameters.Fields = "Id, G4"; }
public async Task <IActionResult> GetCollectorValues(CollectorValuesResourceParameters resourceParameters, [FromHeader(Name = "Accept")] string mediaType) { if (!PropertyMappingService.ValidMappingExistsFor <CollectorValue>(resourceParameters.OrderBy)) { return(BadRequest()); } if (!TypeHelper.TypeHasProperties <CollectorValueDto> (resourceParameters.Fields)) { return(BadRequest()); } var retrievedCollectorValues = await _collectorValueService.FindCollectorValues(resourceParameters); var collectorValues = _mapper.Map <IEnumerable <CollectorValueDto> >(retrievedCollectorValues); var shapedCollectorValues = collectorValues.ShapeData(resourceParameters.Fields); if (mediaType == "application/json+hateoas") { if (!string.IsNullOrEmpty(resourceParameters.Fields) && !resourceParameters.Fields.ToLowerInvariant().Contains("id")) { return(BadRequest("Field parameter 'id' is required")); } var paginationMetadata = new { totalCount = retrievedCollectorValues.TotalCount, pageSize = retrievedCollectorValues.PageSize, currentPage = retrievedCollectorValues.CurrentPage, totalPages = retrievedCollectorValues.TotalPages, }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); var links = CreateCollectorValuesLinks(resourceParameters, retrievedCollectorValues.HasNext, retrievedCollectorValues.HasPrevious); var linkedCollectorValues = shapedCollectorValues.Select(collectorValue => { var collectorValueAsDictionary = collectorValue as IDictionary <string, object>; var collectorValueLinks = CreateCollectorValueLinks ((Guid)collectorValueAsDictionary["Id"], resourceParameters.Fields); collectorValueAsDictionary.Add("links", collectorValueLinks); return(collectorValueAsDictionary); }); var linkedCollectionResource = new LinkedCollectionResource { Value = linkedCollectorValues, Links = links }; return(Ok(linkedCollectionResource)); } else { var previousPageLink = retrievedCollectorValues.HasPrevious ? CreateCollectorValuesResourceUri(resourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = retrievedCollectorValues.HasNext ? CreateCollectorValuesResourceUri(resourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = retrievedCollectorValues.TotalCount, pageSize = retrievedCollectorValues.PageSize, currentPage = retrievedCollectorValues.CurrentPage, totalPages = retrievedCollectorValues.TotalPages, previousPageLink, nextPageLink, }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); return(Ok(shapedCollectorValues)); } }
public CollectorValueServiceTests() { _collectorValueService = new CollectorValueService(_unitOfWork); resourceParameters = new CollectorValuesResourceParameters(); }