/// <summary> /// Get dataset elements from repository and auto map to Dto /// </summary> /// <typeparam name="T">Identifier or detail Dto</typeparam> /// <param name="datasetElementResourceParameters">Standard parameters for representing resource</param> /// <returns></returns> private PagedCollection <T> GetDatasetElements <T>(DatasetElementResourceParameters datasetElementResourceParameters) where T : class { var pagingInfo = new PagingInfo() { PageNumber = datasetElementResourceParameters.PageNumber, PageSize = datasetElementResourceParameters.PageSize }; var orderby = Extensions.GetOrderBy <DatasetElement>(datasetElementResourceParameters.OrderBy, "asc"); var predicate = PredicateBuilder.New <DatasetElement>(true); if (!String.IsNullOrWhiteSpace(datasetElementResourceParameters.ElementName)) { predicate = predicate.And(f => f.ElementName.Contains(datasetElementResourceParameters.ElementName)); } var pagedDatasetElementsFromRepo = _datasetElementRepository.List(pagingInfo, predicate, orderby, new string[] { "Field.FieldType" }); if (pagedDatasetElementsFromRepo != null) { // Map EF entity to Dto var mappedDatasetElements = PagedCollection <T> .Create(_mapper.Map <PagedCollection <T> >(pagedDatasetElementsFromRepo), pagingInfo.PageNumber, pagingInfo.PageSize, pagedDatasetElementsFromRepo.TotalCount); // Prepare pagination data for response var paginationMetadata = new { totalCount = mappedDatasetElements.TotalCount, pageSize = mappedDatasetElements.PageSize, currentPage = mappedDatasetElements.CurrentPage, totalPages = mappedDatasetElements.TotalPages, }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); // Add HATEOAS links to each individual resource mappedDatasetElements.ForEach(dto => CreateLinksForDatasetElement(dto)); return(mappedDatasetElements); } return(null); }
public ActionResult <LinkedCollectionResourceWrapperDto <DatasetElementIdentifierDto> > GetDatasetElementsByIdentifier( [FromQuery] DatasetElementResourceParameters datasetElementResourceParameters) { if (!_typeHelperService.TypeHasProperties <DatasetElementIdentifierDto> (datasetElementResourceParameters.OrderBy)) { return(BadRequest()); } var mappedDatasetElementsWithLinks = GetDatasetElements <DatasetElementIdentifierDto>(datasetElementResourceParameters); var wrapper = new LinkedCollectionResourceWrapperDto <DatasetElementIdentifierDto>(mappedDatasetElementsWithLinks.TotalCount, mappedDatasetElementsWithLinks); //var wrapperWithLinks = CreateLinksForFacilities(wrapper, datasetElementResourceParameters, // mappedDatasetElementsWithLinks.HasNext, mappedDatasetElementsWithLinks.HasPrevious); return(Ok(wrapper)); }