public void VoteNodeModificationSuggestion(NodeModificationVoteViewModel voteViewModel)
        {
            voteViewModel.Date = DateTime.Now;
            var existingNode = _db.NodeModificationVotes.GetAll()
                .FirstOrDefault(m => m.VoteBy.Id == voteViewModel.VoteBy && m.NodeModification.Id == voteViewModel.NodeModificationId);

            if (existingNode != null)
            {
                existingNode.Type = voteViewModel.Type;
            }
            else
            {
                var nodeModification = Mapper.Map<NodeModificationVoteViewModel, NodeModificationVote>(voteViewModel);
                nodeModification.VoteBy = _db.Users.Get(voteViewModel.VoteBy);
                nodeModification.NodeModification =
                    _db.NodeModifications.Get(voteViewModel.NodeModificationId);
                _db.NodeModificationVotes.Create(nodeModification);
            }

            var modifcationSuggestion = _db.NodeModifications.Get(voteViewModel.NodeModificationId);

            var usersCount = _db.Nodes.Get(modifcationSuggestion.Node.Id).Session.Users.Count;
            var votesUp = modifcationSuggestion.Votes.Count(m => m.Type == VoteTypes.Approve);
            var votesDown = modifcationSuggestion.Votes.Count(m => m.Type == VoteTypes.Reject);
            var voteResult = _voteFinishHelper.CheckModificationVoteFinished(votesUp, votesDown, usersCount);

            switch (voteResult)
            {
                case VoteResultTypes.Up:
                    modifcationSuggestion.Status = ModificationStatus.Accepted;

                    if (modifcationSuggestion.Type == ModificationType.Edit)
                    {
                        var nodeToModify = _db.Nodes.Get(modifcationSuggestion.Node.Id);
                        nodeToModify.Name = modifcationSuggestion.Value;
                    }

                    if (modifcationSuggestion.Type == ModificationType.Remove)
                    {
                        _db.Nodes.Delete(modifcationSuggestion.Node.Id);
                    }
                    break;
                case VoteResultTypes.Down:
                    modifcationSuggestion.Status = ModificationStatus.Declined;
                    break;
            }
            _db.Save();
        }
 public void VoteNodeModificationSuggestion(NodeModificationVoteViewModel nodeModificationVoteViewModel)
 {
     _nodeModificationService.VoteNodeModificationSuggestion(nodeModificationVoteViewModel);
 }