Esempio n. 1
0
        async public Task <IActionResult> SearchDatasets(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 <DatasetIndex> > > searchTasks = BuildSearchTasks(searchModel);

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

                DatasetSearchResults results = new DatasetSearchResults();
                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));
            }
        }
Esempio n. 2
0
 void ProcessSearchResults(SearchResults <DatasetIndex> searchResult, DatasetSearchResults 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 DatasetSearchResult
         {
             Id                 = m.Result.Id,
             Name               = m.Result.Name,
             Status             = m.Result.Status,
             DefinitionName     = m.Result.DefinitionName,
             LastUpdatedDate    = m.Result.LastUpdatedDate.LocalDateTime,
             PeriodNames        = m.Result.FundingPeriodNames,
             SpecificationNames = m.Result.SpecificationNames,
             Description        = m.Result.Description,
             Version            = m.Result.Version,
             ChangeNote         = m.Result.ChangeNote,
             LastUpdatedByName  = m.Result.LastUpdatedByName,
             LastUpdatedById    = m.Result.LastUpdatedById
         });
     }
 }