split user creation into a separate method so it can be performed as a transaction