Extracted vote callbacks and controller logic into Voter service object