using System.Linq; using System.Threading.Tasks; using BirdsiteLive.DAL.Contracts; using BirdsiteLive.DAL.Models; namespace BirdsiteLive.Moderation.Actions { public interface IRemoveTwitterAccountAction { Task ProcessAsync(SyncTwitterUser twitterUser); } public class RemoveTwitterAccountAction : IRemoveTwitterAccountAction { private readonly IFollowersDal _followersDal; private readonly ITwitterUserDal _twitterUserDal; private readonly IRejectFollowingAction _rejectFollowingAction; #region Ctor public RemoveTwitterAccountAction( IFollowersDal followersDal, ITwitterUserDal twitterUserDal, IRejectFollowingAction rejectFollowingAction ) { _followersDal = followersDal; _twitterUserDal = twitterUserDal; _rejectFollowingAction = rejectFollowingAction; } #endregion 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); } } }