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