/// <summary> /// Remove a 'Like' from the Tweet if it's already exists /// or add new if it's not /// </summary> /// <param name="tweetId"></param> /// <param name="user"></param> /// <returns></returns> public async Task <int> UpdateLikes(int tweetId, TwitterCopyUser user) { var tweet = await _tweetRepository.GetTweetWithLikesAsync(tweetId); // Apply the user and tweet object from above to the new Like var like = new Like { Tweet = tweet, User = user, }; // Check if the user already has like on this tweet var dupe = tweet.Likes.FirstOrDefault(x => x.UserId.Equals(user.Id)); if (dupe == null) { // If no duplicate was found // Add new like to the database _likeRepository.Add(like); } else { // If duplicate was found then // Delete dupe instead of like because // like doesn't have Id values _likeRepository.Delete(dupe); } await _likeRepository.SaveAsync(); return(tweet.Likes.Count); }