示例#1
0
        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())));
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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));
        }