public async Task <(bool, string)> UpdateSearchParameters(IReadOnlyCollection <string> searchParameterUris, CancellationToken cancellationToken) { var searchParameterStatusList = new List <ResourceSearchParameterStatus>(); foreach (string uri in searchParameterUris) { var searchParamUri = new Uri(uri); try { _searchParameterDefinitionManager.SetSearchParameterEnabled(searchParamUri); } catch (SearchParameterNotSupportedException) { return(false, string.Format(Core.Resources.SearchParameterNoLongerSupported, uri)); } searchParameterStatusList.Add(new ResourceSearchParameterStatus() { LastUpdated = DateTimeOffset.UtcNow, Status = SearchParameterStatus.Enabled, Uri = searchParamUri, }); } await _searchParameterRegistry.UpdateStatuses(searchParameterStatusList); return(true, null); }
public async Task EnsureInitialized() { var updated = new List <SearchParameterInfo>(); var newParameters = new List <ResourceSearchParameterStatus>(); var parameters = (await _searchParameterRegistry.GetSearchParameterStatuses()) .ToDictionary(x => x.Uri); // Set states of known parameters foreach (var p in _searchParameterDefinitionManager.AllSearchParameters) { if (parameters.TryGetValue(p.Url, out ResourceSearchParameterStatus result)) { bool isSearchable = result.Status == SearchParameterStatus.Enabled; bool isSupported = result.Status != SearchParameterStatus.Disabled; if (result.Status == SearchParameterStatus.Disabled) { // Re-check if this parameter is now supported. isSupported = _searchParameterSupportResolver.IsSearchParameterSupported(p); } if (p.IsSearchable != isSearchable || p.IsSupported != isSupported || p.IsPartiallySupported != result.IsPartiallySupported) { p.IsSearchable = isSearchable; p.IsSupported = isSupported; p.IsPartiallySupported = result.IsPartiallySupported; updated.Add(p); } } else { newParameters.Add(new ResourceSearchParameterStatus { Uri = p.Url, LastUpdated = Clock.UtcNow, Status = SearchParameterStatus.Supported, }); p.IsSearchable = false; // Check if this parameter is now supported. p.IsSupported = _searchParameterSupportResolver.IsSearchParameterSupported(p); updated.Add(p); } } if (newParameters.Any()) { await _searchParameterRegistry.UpdateStatuses(newParameters); } await _mediator.Publish(new SearchParametersUpdated(updated)); }