コード例 #1
0
        public async Task <IResultList <UserNotification> > QueryAsync(string appId, string userId, UserNotificationQuery query, CancellationToken ct)
        {
            var filters = new List <FilterDefinition <UserNotification> >
            {
                Filter.Eq(x => x.AppId, appId),
                Filter.Eq(x => x.UserId, userId)
            };

            if (query.After != default)
            {
                filters.Add(Filter.Gte(x => x.Updated, query.After));
            }

            switch (query.Scope)
            {
            case UserNotificationQueryScope.Deleted:
            {
                filters.Add(Filter.Eq(x => x.IsDeleted, true));
                break;
            }

            case UserNotificationQueryScope.NonDeleted:
            {
                filters.Add(
                    Filter.Or(
                        Filter.Exists(x => x.IsDeleted, false),
                        Filter.Eq(x => x.IsDeleted, false)));
                break;
            }
            }

            var filter = Filter.And(filters);

            var resultItems = await Collection.Find(filter).SortByDescending(x => x.Created).ToListAsync(query, ct);

            var resultTotal = (long)resultItems.Count;

            if (query.ShouldQueryTotal(resultItems))
            {
                resultTotal = await Collection.Find(filter).CountDocumentsAsync(ct);
            }

            return(ResultList.Create(resultTotal, resultItems));
        }
コード例 #2
0
        public async Task <IResultList <UserNotification> > QueryAsync(string appId, string userId, UserNotificationQuery query,
                                                                       CancellationToken ct = default)
        {
            using (var activity = Telemetry.Activities.StartActivity("MongoDbUserNotificationRepository/QueryAsync"))
            {
                var filter = BuildFilter(appId, userId, query);

                var resultItems = await Collection.Find(filter).SortByDescending(x => x.Created).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));
            }
        }