/// <summary> /// Gets the rules filtered by specified arguments. /// </summary> /// <param name="rulesFilterArgs">The rules filter arguments.</param> /// <returns></returns> public Task <IEnumerable <Rule <TContentType, TConditionType> > > GetRulesByAsync(RulesFilterArgs <TContentType> rulesFilterArgs) { if (rulesFilterArgs is null) { throw new ArgumentNullException(nameof(rulesFilterArgs)); } FilterDefinition <RuleDataModel> filterDefinition = MongoDbProviderRulesDataSource <TContentType, TConditionType> .BuildFilterFromRulesFilterArgs(rulesFilterArgs); return(this.GetRulesAsync(filterDefinition)); }
public Task <IEnumerable <Rule <TContentType, TConditionType> > > GetRulesByAsync(RulesFilterArgs <TContentType> rulesFilterArgs) { IEnumerable <Rule <TContentType, TConditionType> > result = this.rules.AsEnumerable(); if (!object.Equals(rulesFilterArgs.ContentType, default(TContentType))) { result = result.Where(r => object.Equals(rulesFilterArgs.ContentType, r.ContentContainer.ContentType)); } if (!string.IsNullOrWhiteSpace(rulesFilterArgs.Name)) { result = result.Where(r => string.Equals(r.Name, rulesFilterArgs.Name)); } if (rulesFilterArgs.Priority.HasValue) { result = result.Where(r => r.Priority == rulesFilterArgs.Priority.GetValueOrDefault()); } return(Task.FromResult <IEnumerable <Rule <TContentType, TConditionType> > >(result.Select(r => r.Clone()).ToList())); }
private static FilterDefinition <RuleDataModel> BuildFilterFromRulesFilterArgs(RulesFilterArgs <TContentType> rulesFilterArgs) { List <FilterDefinition <RuleDataModel> > filtersToApply = new List <FilterDefinition <RuleDataModel> >(3); if (!object.Equals(rulesFilterArgs.ContentType, default(TContentType))) { filtersToApply.Add(Builders <RuleDataModel> .Filter.Eq(x => x.ContentType, rulesFilterArgs.ContentType.ToString())); } if (!string.IsNullOrWhiteSpace(rulesFilterArgs.Name)) { filtersToApply.Add(Builders <RuleDataModel> .Filter.Eq(x => x.Name, rulesFilterArgs.Name)); } if (rulesFilterArgs.Priority.HasValue) { filtersToApply.Add(Builders <RuleDataModel> .Filter.Eq(x => x.Priority, rulesFilterArgs.Priority.GetValueOrDefault())); } return(filtersToApply.Any() ? Builders <RuleDataModel> .Filter.And(filtersToApply) : Builders <RuleDataModel> .Filter.Empty); }
/// <summary> /// Gets the rules filtered by specified arguments. /// </summary> /// <param name="rulesFilterArgs">The rules filter arguments.</param> /// <returns></returns> /// <exception cref="ArgumentNullException">rulesFilterArgs</exception> public Task <IEnumerable <Rule <TContentType, TConditionType> > > GetRulesByAsync(RulesFilterArgs <TContentType> rulesFilterArgs) { if (rulesFilterArgs is null) { throw new ArgumentNullException(nameof(rulesFilterArgs)); } return(Task.Run(() => { IEnumerable <RuleDataModel <TContentType, TConditionType> > ruleDataModels = this.inMemoryRulesStorage.GetAllRules(); IEnumerable <RuleDataModel <TContentType, TConditionType> > filtered = ruleDataModels; if (!object.Equals(rulesFilterArgs.ContentType, default(TContentType))) { filtered = filtered.Where(r => object.Equals(r.ContentType, rulesFilterArgs.ContentType)); } if (!string.IsNullOrWhiteSpace(rulesFilterArgs.Name)) { filtered = filtered.Where(r => string.Equals(r.Name, rulesFilterArgs.Name, StringComparison.InvariantCultureIgnoreCase)); } if (rulesFilterArgs.Priority.HasValue) { filtered = filtered.Where(r => r.Priority == rulesFilterArgs.Priority); } return filtered.Select(r => this.ruleFactory.CreateRule(r)).ToList().AsEnumerable(); })); }