Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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));
        }