public async Task ExecuteAsync(string followerUsername, string followerDomain, string twitterUsername)
        {
            // Get Follower and Twitter Users
            var follower = await _followerDal.GetFollowerAsync(followerUsername, followerDomain);

            if (follower == null)
            {
                return;
            }

            var twitterUser = await _twitterUserDal.GetTwitterUserAsync(twitterUsername);

            if (twitterUser == null)
            {
                return;
            }

            // Update Follower
            var twitterUserId = twitterUser.Id;

            if (follower.Followings.Contains(twitterUserId))
            {
                follower.Followings.Remove(twitterUserId);
            }

            if (follower.FollowingsSyncStatus.ContainsKey(twitterUserId))
            {
                follower.FollowingsSyncStatus.Remove(twitterUserId);
            }

            // Save or delete Follower
            if (follower.Followings.Any())
            {
                await _followerDal.UpdateFollowerAsync(follower);
            }
            else
            {
                await _followerDal.DeleteFollowerAsync(followerUsername, followerDomain);
            }

            // Check if TwitterUser has still followers
            var followers = await _followerDal.GetFollowersAsync(twitterUser.Id);

            if (!followers.Any())
            {
                await _twitterUserDal.DeleteTwitterUserAsync(twitterUsername);
            }
        }
예제 #2
0
        public async Task ProcessAsync(Follower follower)
        {
            // Perform undo following to user instance
            await _rejectAllFollowingsAction.ProcessAsync(follower);

            // Remove twitter users if no more followers
            var followings = follower.Followings;

            foreach (var following in followings)
            {
                var followers = await _followersDal.GetFollowersAsync(following);

                if (followers.Length == 1 && followers.First().Id == follower.Id)
                {
                    await _twitterUserDal.DeleteTwitterUserAsync(following);
                }
            }

            // Remove follower from DB
            await _followersDal.DeleteFollowerAsync(follower.Id);
        }
예제 #3
0
        public async Task ProcessAsync(SyncTwitterUser twitterUser)
        {
            // Check Followers
            var twitterUserId = twitterUser.Id;
            var followers     = await _followersDal.GetFollowersAsync(twitterUserId);

            // Remove all Followers
            foreach (var follower in followers)
            {
                // Perform undo following to user instance
                await _rejectFollowingAction.ProcessAsync(follower, twitterUser);

                // Remove following from DB
                if (follower.Followings.Contains(twitterUserId))
                {
                    follower.Followings.Remove(twitterUserId);
                }

                if (follower.FollowingsSyncStatus.ContainsKey(twitterUserId))
                {
                    follower.FollowingsSyncStatus.Remove(twitterUserId);
                }

                if (follower.Followings.Any())
                {
                    await _followersDal.UpdateFollowerAsync(follower);
                }
                else
                {
                    await _followersDal.DeleteFollowerAsync(follower.Id);
                }
            }

            // Remove twitter user
            await _twitterUserDal.DeleteTwitterUserAsync(twitterUserId);
        }