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); }