public void RemoveEvent(NewsfeedEventModel entry, IEnumerable <string> followers)
        {
            var activityEntry = MapToActivity(entry);
            var keys          = MapRedisKeys(entry.ReferencePostId, followers);
            var isPostRemoval = entry.ActionType == NewsfeedActionType.wallpost;


            var transaction = StackExchangeRedisConnectionProvider.GetTransaction();

            if (isPostRemoval)
            {
                foreach (var key in keys)
                {
                    transaction.SetRemoveAsync(key.PostFeedKey, entry.ReferencePostId);
                    transaction.KeyDeleteAsync(key.PostActionsKey);
                }
            }
            else
            {
                foreach (var key in keys)
                {
                    transaction.SortedSetDecrementAsync(key.PostActionsKey, activityEntry, 1);
                    transaction.SortedSetRemoveRangeByScoreAsync(key.PostActionsKey, -10, 0);
                }
            }
            transaction.Execute();
        }
示例#2
0
        private IEnumerable <NewsfeedEventModel> MapInitialFeed(IEnumerable <GetInitialFeedPosts_Result> procResult)
        {
            var retVal = new List <NewsfeedEventModel>();

            foreach (var record in procResult)
            {
                var model = new NewsfeedEventModel();
                model.ReferencePostId = record.Id;
                model.By         = record.EventBy;
                model.ActionType = (NewsfeedActionType)Enum.Parse(typeof(NewsfeedActionType), record.EventDetail);
                retVal.Add(model);
            }
            return(retVal);
        }
        public void AddEvent(NewsfeedEventModel entry, IEnumerable <string> followers)
        {
            var activityEntry = MapToActivity(entry);
            var keys          = MapRedisKeys(entry.ReferencePostId, followers);

            var transaction = StackExchangeRedisConnectionProvider.GetTransaction();

            foreach (var key in keys)
            {
                transaction.SetAddAsync(key.PostFeedKey, entry.ReferencePostId);
                transaction.SortedSetIncrementAsync(key.PostActionsKey, activityEntry, 1);
            }
            transaction.Execute();
        }
示例#4
0
        public void RemovePost(NewsfeedItem newsFeedEntry)
        {
            var followers = GetFollowers(newsFeedEntry.By, newsFeedEntry.WallOwner);

            if (followers.Any())
            {
                var newsFeedCacheModel = new NewsfeedEventModel
                {
                    By              = newsFeedEntry.By,
                    ActionType      = newsFeedEntry.FeedType,
                    ReferencePostId = newsFeedEntry.ReferencePostId
                };
                feedCacheRepo.RemoveEvent(newsFeedCacheModel, followers);
            }
        }
 private string MapToActivity(NewsfeedEventModel newsFeedEntry)
 {
     return(string.Concat(newsFeedEntry.By, ":", (short)newsFeedEntry.ActionType));
 }