public IActionResult Post([FromBody] DocumentFilterSettings filterSettings = null, [FromRoute] string scrollId = null)
        {
            if (filterSettings == null && scrollId == null)
            {
                return(HttpErrorResult(StatusCodes.Status400BadRequest,
                                       DocumentResources.FilterSettingsOrScrollIdParameterMustHasValue));
            }

            try
            {
                if (!string.IsNullOrWhiteSpace(scrollId))
                {
                    return(new OkObjectResult(documentService.GetScrolled(dataSetName, scrollId)));
                }

                if (!string.IsNullOrEmpty(filterSettings.Order?.OrderByField))
                {
                    var orderByFieldResult = documentService.ValidateOrderByField(dataSetName, filterSettings.Order.OrderByField);
                    if (orderByFieldResult.IsFailure)
                    {
                        return(HttpErrorResult(StatusCodes.Status400BadRequest, orderByFieldResult.Error));
                    }
                }

                if (filterSettings.FieldList != null)
                {
                    var validateResult = documentService.ValidateFieldFilterFields(dataSetName, filterSettings.FieldList);
                    if (validateResult.IsFailure)
                    {
                        return(HttpErrorResult(StatusCodes.Status400BadRequest, validateResult.Error));
                    }
                }

                var paginatedList =
                    documentService.Filter(
                        dataSetName,
                        filterSettings?.Filter?.Query,
                        filterSettings?.Filter?.TagIdList,
                        filterSettings.Pagination.Limit,
                        filterSettings?.Order?.OrderByField,
                        filterSettings?.Order?.OrderDirection == OrderDirectionEnum.Desc,
                        filterSettings?.FieldList);

                return(new OkObjectResult(paginatedList));
            }
            catch (ElasticSearchException ex)
                when(ex.ServerError.Error.Type == "search_phase_execution_exception" &&
                     ex.ServerError.Error.RootCause.Any(e => e.Type == "number_format_exception"))
                {
                    var errors =
                        ex.ServerError.Error.RootCause
                        .Where(c => c.Type == "number_format_exception")
                        .Select(c => c.Reason.Replace("For input string: ", ""))
                        .Select(input => string.Format(DocumentResources.InvalidNumericFilterValue, input));

                    return(HttpErrorResult(StatusCodes.Status400BadRequest, errors));
                }
        }
        public async Task <ClientResponseWithObject <PaginatedList <object> > > GetFilteredDocumentsAsync(DocumentFilterSettings filterSettings, string scrollId)
        {
            var client = new ApiClient(_configuration, FilterEndpoint);

            if (!string.IsNullOrEmpty(scrollId))
            {
                return(await client.SendAsync <PaginatedList <object> >(System.Net.Http.HttpMethod.Post, null, scrollId, null, Headers, false));
            }

            return(await client.SendAsync <PaginatedList <object> >(System.Net.Http.HttpMethod.Post, filterSettings, null, null, Headers, true));
        }
 public Task <ClientResponseWithObject <PaginatedList <object> > > GetFilteredDocumentsAsync(DocumentFilterSettings filterSettings, string scrollId)
 {
     throw new NotImplementedException();
 }