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)); }
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)); } }