public async Task <IResultList <ChannelTemplate <T> > > QueryAsync(string appId, ChannelTemplateQuery query, CancellationToken ct = default) { using (var activity = Telemetry.Activities.StartActivity("MongoDbChannelTemplateRepository/QueryAsync")) { var filter = BuildFilter(appId, query); var resultItems = await Collection.Find(filter).ToListAsync(query, ct); var resultTotal = (long)resultItems.Count; if (query.ShouldQueryTotal(resultItems)) { resultTotal = await Collection.Find(filter).CountDocumentsAsync(ct); } activity?.SetTag("numResults", resultItems.Count); activity?.SetTag("numTotal", resultTotal); return(ResultList.Create(resultTotal, resultItems.Select(x => x.ToChannelTemplate()))); } }
public async Task <IResultList <ChannelTemplate <T> > > QueryAsync(string appId, ChannelTemplateQuery query, CancellationToken ct = default) { Guard.NotNullOrEmpty(appId); Guard.NotNull(query); var templates = await repository.QueryAsync(appId, query, ct); return(templates); }
private static FilterDefinition <MongoDbChannelTemplate <T> > BuildFilter(string appId, ChannelTemplateQuery query) { var filters = new List <FilterDefinition <MongoDbChannelTemplate <T> > > { Filter.Eq(x => x.Doc.AppId, appId) }; if (!string.IsNullOrWhiteSpace(query.Query)) { var regex = new BsonRegularExpression(Regex.Escape(query.Query), "i"); filters.Add(Filter.Regex(x => x.Doc.Name, regex)); } return(Filter.And(filters)); }