public Task <ICollection <TEventBase> > GetFeed(TFeedKey feedId, int?skip = null, int?take = null) { var query = _feed .FindAs <ActivityFeedItem <TFeedKey, TEventKey, TSourceKey> >( Query.EQ("FeedId", BsonValue.Create(feedId)) ) .SetSortOrder(SortBy.Descending("Relevancy")) .SetFields(ExcludeId.Include("EventId")); if (skip != null) { query = query.SetSkip(skip.Value); } if (take != null) { query = query.SetLimit(take.Value); } var eventIds = query.Select(e => BsonValue.Create(e.EventId)).ToList(); var result = _events.FindAs <TEventBase>(Query.In("_id", eventIds)) .SetSortOrder(SortBy.Descending("Relevancy")) .ToList(); return(StubTask.Value((ICollection <TEventBase>)result)); }
private Task AddToRelatedFeeds(TEventBase @event) { var relatedFeeds = _relations.FindAs <ActivityFeedRelation <TFeedKey, TSourceKey> >( Query.EQ("SourceId", BsonValue.Create(@event.SourceId)) ).SetFields(ExcludeId.Include("FeedId")); if (relatedFeeds.Size() == 0) { return(StubTask.Void); } var feedItems = relatedFeeds.Select( relation => new ActivityFeedItem <TFeedKey, TEventKey, TSourceKey> { FeedId = relation.FeedId, EventId = @event.Id, SourceId = @event.SourceId, Relevancy = @event.Relevancy }); _feed.InsertBatch(feedItems, _fanOutWriteConcern).ThrowIfNotOk(); return(StubTask.Void); }