예제 #1
0
        private async Task NormalSearchProcessing(KeyValuePair <string, StringValues> Parameter)
        {
            List <Bug.Logic.DomainModel.SearchParameter> SearchParameterList = await ISearchParameterCache.GetForIndexingAsync(this.FhirVersion, this.ResourceContext);

            //Remove modifiers
            var SearchParameterName = Parameter.Key.Split(FhirSearchQuery.TermSearchModifierDelimiter)[0].Trim();

            Bug.Logic.DomainModel.SearchParameter SearchParameter = SearchParameterList.SingleOrDefault(x => x.Name == SearchParameterName);
            if (SearchParameter != null)
            {
                IList <ISearchQueryBase> SearchQueryBaseList = await ISearchQueryFactory.Create(this.ResourceContext, SearchParameter, Parameter);

                foreach (ISearchQueryBase SearchQueryBase in SearchQueryBaseList)
                {
                    if (SearchQueryBase.IsValid)
                    {
                        Outcome !.SearchQueryList.Add(SearchQueryBase);
                    }
                    else
                    {
                        Outcome !.InvalidSearchQueryList.Add(new InvalidSearchQueryParameter(SearchQueryBase.RawValue, SearchQueryBase.InvalidMessage));
                    }
                }
            }
            else
            {
                foreach (var ParamValue in Parameter.Value)
                {
                    string Message = $"The search query parameter: {Parameter.Key} is not supported by this server for the resource type: {ResourceContext.GetCode()}, the whole parameter was : {Parameter.Key}={ParamValue}";
                    Outcome !.UnsupportedSearchQueryList.Add(new InvalidSearchQueryParameter(Parameter.Key, ParamValue, Message));
                }
            }
        }