private string CreateServiceInfosUri(ServiceInfoResourceParameters serviceInfoResourceParameters, UriType uriType, string routeName)
        {
            switch (uriType)
            {
            case UriType.PreviousPage:
                return(Url.Link(routeName, new
                {
                    pageNumber = serviceInfoResourceParameters.PageNumber - 1,
                    serviceInfoResourceParameters.PageSize,
                    serviceInfoResourceParameters.SearchQuery,
                    serviceInfoResourceParameters.OrderBy,
                    serviceInfoResourceParameters.Fields
                }));

            case UriType.NextPage:
                return(Url.Link(routeName, new
                {
                    pageNumber = serviceInfoResourceParameters.PageNumber + 1,
                    serviceInfoResourceParameters.PageSize,
                    searchQuery = serviceInfoResourceParameters.SearchQuery,
                    serviceInfoResourceParameters.OrderBy,
                    serviceInfoResourceParameters.Fields
                }));

            default:
                return(Url.Link(routeName, new
                {
                    serviceInfoResourceParameters.PageNumber,
                    serviceInfoResourceParameters.PageSize,
                    serviceInfoResourceParameters.SearchQuery,
                    serviceInfoResourceParameters.OrderBy,
                    serviceInfoResourceParameters.Fields
                }));
            }
        }
        public IActionResult GetServiceInfos([FromQuery] ServiceInfoResourceParameters postResourceParameters)
        {
            if (!_propertyMapping.ValidMappingExist <ServiceInfoOutputDto, ServiceInfo>(postResourceParameters.OrderBy))
            {
                return(BadRequest());
            }
            if (!_propertyValidation.HasValidProperties <ServiceInfoOutputDto>(postResourceParameters.Fields))
            {
                return(BadRequest());
            }

            var serviceInfoFromRepo = _serviceInfoRepository.GetServiceInfos(postResourceParameters);

            var previousPageLink = serviceInfoFromRepo.HasPrevious ? CreateServiceInfosUri(postResourceParameters, UriType.PreviousPage, "GetServiceInfos") : null;
            var nextPageLink     = serviceInfoFromRepo.HasNext ? CreateServiceInfosUri(postResourceParameters, UriType.NextPage, "GetServiceInfos") : null;

            var metaData = new
            {
                totalCount  = serviceInfoFromRepo.TotalCount,
                pageSize    = serviceInfoFromRepo.PageSize,
                currentPage = serviceInfoFromRepo.CurrentPage,
                totalPages  = serviceInfoFromRepo.TotalPages,
                previousPageLink,
                nextPageLink,
            };

            Response.Headers.Add("Pagination", JsonSerializer.Serialize(metaData));

            return(Ok(_mapper.Map <IEnumerable <ServiceInfoOutputDto> >(serviceInfoFromRepo).ShapeData(postResourceParameters.Fields)));
        }
        public PageList <ServiceInfo> GetServiceInfos(ServiceInfoResourceParameters serviceInfoResourceParameters)
        {
            if (serviceInfoResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(serviceInfoResourceParameters));
            }

            var collection = _context.ServiceInfos as IQueryable <ServiceInfo>;

            if (!string.IsNullOrWhiteSpace(serviceInfoResourceParameters.SearchQuery))
            {
                string searchinQuery = serviceInfoResourceParameters.SearchQuery.Trim().ToLower();
                collection = collection.Where(s => s.CenterName.ToLower().Contains(searchinQuery) || s.LocalCenterName.ToLower().Contains(searchinQuery));
            }

            if (!string.IsNullOrWhiteSpace(serviceInfoResourceParameters.OrderBy))
            {
                var postPropertyMappingDictionary = _propertyMapping.GetPropertyMapping <ServiceInfoOutputDto, ServiceInfo>();
                collection = collection.ApplySort(serviceInfoResourceParameters.OrderBy, postPropertyMappingDictionary);
            }

            return(PageList <ServiceInfo> .Create(collection, serviceInfoResourceParameters.PageNumber, serviceInfoResourceParameters.PageSize));
        }