There's a lot of duplication between `upvote` and `downvote` methods. Can you factor out a method?