public ActionResult <IEnumerable <ValueToReplaceDto> > GetValueToReplaces([FromQuery] ValueToReplaceParametersDto valueToReplaceParametersDto)
        {
            var valueToReplacesFromRepo = _valueToReplaceRepository.GetValueToReplaces(valueToReplaceParametersDto);

            var previousPageLink = valueToReplacesFromRepo.HasPrevious
                    ? CreateValueToReplacesResourceUri(valueToReplaceParametersDto,
                                                       ResourceUriType.PreviousPage)
                    : null;

            var nextPageLink = valueToReplacesFromRepo.HasNext
                ? CreateValueToReplacesResourceUri(valueToReplaceParametersDto,
                                                   ResourceUriType.NextPage)
                : null;

            var paginationMetadata = new
            {
                totalCount  = valueToReplacesFromRepo.TotalCount,
                pageSize    = valueToReplacesFromRepo.PageSize,
                pageNumber  = valueToReplacesFromRepo.PageNumber,
                totalPages  = valueToReplacesFromRepo.TotalPages,
                hasPrevious = valueToReplacesFromRepo.HasPrevious,
                hasNext     = valueToReplacesFromRepo.HasNext,
                previousPageLink,
                nextPageLink
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var valueToReplacesDto = _mapper.Map <IEnumerable <ValueToReplaceDto> >(valueToReplacesFromRepo);

            return(Ok(valueToReplacesDto));
        }
Example #2
0
        public PagedList <ValueToReplace> GetValueToReplaces(ValueToReplaceParametersDto valueToReplaceParameters)
        {
            if (valueToReplaceParameters == null)
            {
                throw new ArgumentNullException(nameof(valueToReplaceParameters));
            }

            var collection = _context.ValueToReplaces as IQueryable <ValueToReplace>; // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate

            if (!string.IsNullOrWhiteSpace(valueToReplaceParameters.QueryString))
            {
                var QueryString = valueToReplaceParameters.QueryString.Trim();
                collection = collection.Where(lambdaInitialsToReplace => lambdaInitialsToReplace.ValueToReplaceTextField1.Contains(QueryString) ||
                                              lambdaInitialsToReplace.ValueToReplaceTextField2.Contains(QueryString));
            }

            var sieveModel = new SieveModel
            {
                Sorts   = valueToReplaceParameters.SortOrder,
                Filters = valueToReplaceParameters.Filters
            };

            collection = _sieveProcessor.Apply(sieveModel, collection);

            return(PagedList <ValueToReplace> .Create(collection,
                                                      valueToReplaceParameters.PageNumber,
                                                      valueToReplaceParameters.PageSize));
        }
        private string CreateValueToReplacesResourceUri(
            ValueToReplaceParametersDto valueToReplaceParametersDto,
            ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link("GetValueToReplaces",
                                new
                {
                    filters = valueToReplaceParametersDto.Filters,
                    orderBy = valueToReplaceParametersDto.SortOrder,
                    pageNumber = valueToReplaceParametersDto.PageNumber - 1,
                    pageSize = valueToReplaceParametersDto.PageSize,
                    searchQuery = valueToReplaceParametersDto.QueryString
                }));

            case ResourceUriType.NextPage:
                return(Url.Link("GetValueToReplaces",
                                new
                {
                    filters = valueToReplaceParametersDto.Filters,
                    orderBy = valueToReplaceParametersDto.SortOrder,
                    pageNumber = valueToReplaceParametersDto.PageNumber + 1,
                    pageSize = valueToReplaceParametersDto.PageSize,
                    searchQuery = valueToReplaceParametersDto.QueryString
                }));

            default:
                return(Url.Link("GetValueToReplaces",
                                new
                {
                    filters = valueToReplaceParametersDto.Filters,
                    orderBy = valueToReplaceParametersDto.SortOrder,
                    pageNumber = valueToReplaceParametersDto.PageNumber,
                    pageSize = valueToReplaceParametersDto.PageSize,
                    searchQuery = valueToReplaceParametersDto.QueryString
                }));
            }
        }