public async Task <IEnumerable <UserTweetReaction> > ReactedToMany(IEnumerable <UserTweetReaction> reactions)
        {
            foreach (UserTweetReaction r in reactions)
            {
                UserTweetReactionModel model = await _dbContext.UserTweetReaction
                                               .FirstOrDefaultAsync(u => u.UserId == r.UserId && u.TweetId == r.TweetId && u.ReactionId == r.ReactionId);

                if (model != null)
                {
                    r.Reacted = true;
                }
            }

            return(reactions);
        }
        public async Task <UserTweetReaction> Reacted(UserTweetReaction userTweetReaction)
        {
            UserTweetReactionModel model = await _dbContext.UserTweetReaction
                                           .FirstOrDefaultAsync(u => u.UserId == userTweetReaction.UserId &&
                                                                u.TweetId == userTweetReaction.TweetId &&
                                                                u.ReactionId == userTweetReaction.ReactionId);

            if (model == null)
            {
                userTweetReaction.Reacted = false;

                return(userTweetReaction);
            }

            userTweetReaction.Reacted = true;

            return(userTweetReaction);
        }
        public async Task <UserTweetReaction> Toggle(UserTweetReaction userTweetReaction)
        {
            AppUser user = await _dbContext.Users.FirstOrDefaultAsync(u => u.Id == userTweetReaction.UserId);

            TweetModel tweetModel = await _dbContext.Tweet.FirstOrDefaultAsync(t => t.Id == userTweetReaction.TweetId);

            ReactionModel reactionModel = await _dbContext.Reaction.FirstOrDefaultAsync(r => r.Id == userTweetReaction.ReactionId);

            if (user == null || tweetModel == null || reactionModel == null)
            {
                throw new ArgumentNullException("Invalid input");
            }

            UserTweetReactionModel model = await _dbContext.UserTweetReaction
                                           .FirstOrDefaultAsync(u => u.UserId == userTweetReaction.UserId && u.TweetId == userTweetReaction.TweetId && u.ReactionId == userTweetReaction.ReactionId);

            if (model != null)
            {
                _dbContext.Remove <UserTweetReactionModel>(model);
                await _dbContext.SaveChangesAsync();

                return(null);
            }

            model = new UserTweetReactionModel
            {
                UserId     = userTweetReaction.UserId,
                TweetId    = userTweetReaction.TweetId,
                ReactionId = userTweetReaction.ReactionId
            };

            _dbContext.Add <UserTweetReactionModel>(model);
            await _dbContext.SaveChangesAsync();

            userTweetReaction.Id    = model.Id;
            userTweetReaction.User  = user;
            userTweetReaction.Tweet = new Tweet {
                Id = tweetModel.Id, Text = tweetModel.Text
            };
            userTweetReaction.Reaction    = new Reaction(name: reactionModel.Name);
            userTweetReaction.Reaction.Id = reactionModel.Id;

            return(userTweetReaction);
        }