pushed user creation logic down to model