update factories to have cleaner association logic