/// <summary> /// Get lab results from repository and auto map to Dto /// </summary> /// <typeparam name="T">Identifier or detail Dto</typeparam> /// <param name="labResultResourceParameters">Standard parameters for representing resource</param> /// <returns></returns> private PagedCollection <T> GetLabResults <T>(LabResultResourceParameters labResultResourceParameters) where T : class { var pagingInfo = new PagingInfo() { PageNumber = labResultResourceParameters.PageNumber, PageSize = labResultResourceParameters.PageSize }; var orderby = Extensions.GetOrderBy <LabResult>(labResultResourceParameters.OrderBy, "asc"); var predicate = PredicateBuilder.New <LabResult>(true); if (!String.IsNullOrWhiteSpace(labResultResourceParameters.SearchTerm)) { predicate = predicate.And(f => f.Description.Contains(labResultResourceParameters.SearchTerm.Trim())); } if (labResultResourceParameters.Active != Models.ValueTypes.YesNoBothValueType.Both) { predicate = predicate.And(f => f.Active == (labResultResourceParameters.Active == Models.ValueTypes.YesNoBothValueType.Yes)); } var pagedLabResultsFromRepo = _labResultRepository.List(pagingInfo, predicate, orderby, ""); if (pagedLabResultsFromRepo != null) { // Map EF entity to Dto var mappedLabResults = PagedCollection <T> .Create(_mapper.Map <PagedCollection <T> >(pagedLabResultsFromRepo), pagingInfo.PageNumber, pagingInfo.PageSize, pagedLabResultsFromRepo.TotalCount); // Prepare pagination data for response var paginationMetadata = new { totalCount = mappedLabResults.TotalCount, pageSize = mappedLabResults.PageSize, currentPage = mappedLabResults.CurrentPage, totalPages = mappedLabResults.TotalPages, }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); // Add HATEOAS links to each individual resource mappedLabResults.ForEach(dto => CreateLinksForLabResult(dto)); return(mappedLabResults); } return(null); }
public ActionResult <LinkedCollectionResourceWrapperDto <LabResultIdentifierDto> > GetLabResultsByIdentifier( [FromQuery] LabResultResourceParameters labResultResourceParameters) { if (!_propertyMappingService.ValidMappingExistsFor <LabResultIdentifierDto, LabResult> (labResultResourceParameters.OrderBy)) { return(BadRequest()); } var mappedLabResultsWithLinks = GetLabResults <LabResultIdentifierDto>(labResultResourceParameters); var wrapper = new LinkedCollectionResourceWrapperDto <LabResultIdentifierDto>(mappedLabResultsWithLinks.TotalCount, mappedLabResultsWithLinks); //var wrapperWithLinks = CreateLinksForFacilities(wrapper, labResultResourceParameters, // mappedLabResultsWithLinks.HasNext, mappedLabResultsWithLinks.HasPrevious); return(Ok(wrapper)); }