public Vote AddVoteToIdea(int value, string userId, string email, int ideaId)
        {
            _unitOfWorkManager.StartUnitOfWork();

            bool isUserVote  = !userId.IsNullOrEmpty();
            bool isEmailVote = !email.IsNullOrEmpty();

            Vote vote = null;

            if (isUserVote)
            {
                vote = _userManager.GetVoteForIdea(ideaId, userId);
            }
            else if (isEmailVote)
            {
                vote = _userManager.GetEmailVoteForIdea(ideaId, email);
            }

            if (vote == null)
            {
                if (isUserVote)
                {
                    vote = _userManager.AddVoteToUser(value, userId);
                }
                else if (isEmailVote)
                {
                    vote = _userManager.AddVoteWithEmail(value, email);
                }
                else
                {
                    vote = _userManager.AddAnonymousVote(value);
                }
            }
            else
            {
                vote = _userManager.ChangeVoteValue(vote.VoteId, value);
            }

            _ideationManager.AddVoteToIdea(vote, ideaId);

            _unitOfWorkManager.EndUnitOfWork();

            if (vote == null)
            {
                throw new Exception("Something went wrong while creating the vote.");
            }

            return(vote);
        }