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