2021-01-04 21:45:48 -05:00
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
2020-07-08 19:50:58 -04:00
|
|
|
|
using BirdsiteLive.DAL.Contracts;
|
|
|
|
|
|
|
|
|
|
namespace BirdsiteLive.Domain.BusinessUseCases
|
2020-07-07 21:03:20 -04:00
|
|
|
|
{
|
2020-07-08 19:50:58 -04:00
|
|
|
|
public interface IProcessUndoFollowUser
|
2020-07-07 21:03:20 -04:00
|
|
|
|
{
|
2020-07-08 19:50:58 -04:00
|
|
|
|
Task ExecuteAsync(string followerUsername, string followerDomain, string twitterUsername);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class ProcessUndoFollowUser : IProcessUndoFollowUser
|
|
|
|
|
{
|
|
|
|
|
private readonly IFollowersDal _followerDal;
|
|
|
|
|
private readonly ITwitterUserDal _twitterUserDal;
|
|
|
|
|
|
|
|
|
|
#region Ctor
|
|
|
|
|
public ProcessUndoFollowUser(IFollowersDal followerDal, ITwitterUserDal twitterUserDal)
|
|
|
|
|
{
|
|
|
|
|
_followerDal = followerDal;
|
|
|
|
|
_twitterUserDal = twitterUserDal;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
2021-01-04 21:45:48 -05:00
|
|
|
|
// 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);
|
2020-07-08 19:50:58 -04:00
|
|
|
|
}
|
2020-07-07 21:03:20 -04:00
|
|
|
|
}
|
|
|
|
|
}
|