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)); } }
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, }); } }