*/ class RegisterUserHandler implements HandlerInterface { public function __construct( private readonly EntityManagerInterface $entityManager, private readonly PreferencesRepository $preferenceRepository, private readonly UserPasswordHasherInterface $userPasswordHasher, ) {} public function handle(C $command): R { $user = new User(); $user->setUsername($command->username); $user->setEmail($command->email); $user->setPassword($this->userPasswordHasher->hashPassword($user, $command->password)); $user->setName($command->name); $this->entityManager->persist($user); $this->entityManager->flush(); $this->setUserPreferences($user, $this->preferenceRepository->findEnabled()); $this->entityManager->flush(); return new RegisterUserResult($user); } private function setUserPreferences(User $user, array $preferences): void { foreach ($preferences as $preference) { $user->addUserPreference((new UserPreference()) ->setUser($user) ->setPreference($preference) ->setPreferenceValue(null) ); } } }