refactor campaign model