public Vote CreateVote(int score, long userId, long trackId) { Vote vote; var playlist = repo.ReadPlaylists().FirstOrDefault(p => p.PlaylistTracks.Any(t => t.Id == trackId)); var existingVote = repo.ReadVoteOfUserFromPlaylistTrack(userId, trackId); if (existingVote == null) { vote = new Vote() { Score = score }; return(repo.CreateVote(vote, userId, trackId)); } else { if (existingVote.Score == score) { DeleteVote(existingVote); existingVote.Score = 0; return(existingVote); } else { vote = existingVote; vote.Score = score; return(repo.UpdateVote(vote)); } } }