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