email === null || $request->email === '') { throw new BadRequestException('email is required'); } if ($request->password === null || $request->password === '') { throw new BadRequestException('password is required'); } if (strlen($request->password) < self::MIN_PASSWORD_LENGTH) { throw new BadRequestException( 'password must be at least '.self::MIN_PASSWORD_LENGTH.' characters' ); } try { $email = new EmailAddress($request->email); } catch (InvalidArgumentException $exception) { throw new BadRequestException($exception->getMessage()); } if ($this->userRepo->findByEmail($email) !== null) { throw new DomainException('email already registered'); } return $this->userRepo->create(new CreateUserDto( email: $email, passwordHash: $this->hasher->hash($request->password), isAdmin: false, )); } }