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