Пример #1
0
        async public Task <IActionResult> SearchDatasetDefinitions(HttpRequest request)
        {
            string json = await request.GetRawBodyStringAsync();

            SearchModel searchModel = JsonConvert.DeserializeObject <SearchModel>(json);

            if (searchModel == null || searchModel.PageNumber < 1 || searchModel.Top < 1)
            {
                _logger.Error("A null or invalid search model was provided for searching datasets");

                return(new BadRequestObjectResult("An invalid search model was provided"));
            }

            IEnumerable <Task <SearchResults <DatasetDefinitionIndex> > > searchTasks = BuildSearchTasks(searchModel);

            try
            {
                await TaskHelper.WhenAllAndThrow(searchTasks.ToArraySafe());

                DatasetDefinitionSearchResults results = new DatasetDefinitionSearchResults();
                foreach (var searchTask in searchTasks)
                {
                    ProcessSearchResults(searchTask.Result, results);
                }

                return(new OkObjectResult(results));
            }
            catch (FailedToQuerySearchException exception)
            {
                _logger.Error(exception, $"Failed to query search with term: {searchModel.SearchTerm}");

                return(new StatusCodeResult(500));
            }
        }
Пример #2
0
 void ProcessSearchResults(SearchResults <DatasetDefinitionIndex> searchResult, DatasetDefinitionSearchResults results)
 {
     if (!searchResult.Facets.IsNullOrEmpty())
     {
         results.Facets = results.Facets.Concat(searchResult.Facets);
     }
     else
     {
         results.TotalCount = (int)(searchResult?.TotalCount ?? 0);
         results.Results    = searchResult?.Results?.Select(m => new DatasetDefinitionSearchResult
         {
             Id                 = m.Result.Id,
             Name               = m.Result.Name,
             Description        = m.Result.Description,
             LastUpdatedDate    = m.Result.LastUpdatedDate,
             ProviderIdentifier = m.Result.ProviderIdentifier,
         });
     }
 }