async def register_new_user(self, *, new_user: UserCreate) -> UserInDB: # make sure email isn't already taken if await self.get_user_by_email(email=new_user.email): raise HTTPException( status_code=HTTP_400_BAD_REQUEST, detail= "That email is already taken. Login with that email or register with another one.", ) # make sure username isn't already taken if await self.get_user_by_username(username=new_user.username): raise HTTPException( status_code=HTTP_400_BAD_REQUEST, detail="That username is already taken. Please try another one." ) user_password_update = self.auth_service.create_salt_and_hashed_password( plaintext_password=new_user.password) new_user_params = new_user.copy(update=user_password_update.dict()) created_user = await self.db.fetch_one(query=REGISTER_NEW_USER_QUERY, values=new_user_params.dict()) # This is a useful pattern that we'll take advantage of regularly. By adding the # ProfilesRepository as a sub-repo of the UsersRepository, we can insert any # profile-related logic directly into our user-related logic. # Create profile for new user (UserPublic.profile model) await self.profiles_repo.create_profile_for_user( profile_create=ProfileCreate(user_id=created_user["id"])) return await self.populate_user(user=UserInDB(**created_user))
async def register_new_user(self, *, new_user: UserCreate) -> UserInDB: # make sure email isn't already taken if await self.get_user_by_email(email=new_user.email): raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail= "That email is already taken. Login with that email or register with another one." ) # make sure username isn't already taken if await self.get_user_by_username(username=new_user.username): raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="That username is already taken. Please try another one." ) user_password_update = self.auth_service.create_salt_and_hashed_password( plaintext_password=new_user.password) new_user_params = new_user.copy(update=user_password_update.dict()) created_user = await self.db.fetch_one(query=REGISTER_NEW_USER_QUERY, values=new_user_params.dict()) # create profile for new user await self.profiles_repo.create_profile_for_user( profile_create=ProfileCreate(user_id=created_user["id"])) return await self.populate_user(user=UserInDB(**created_user))