diff --git a/backend/app/User/UseCases/SignupUser/SignupUser.php b/backend/app/User/UseCases/SignupUser/SignupUser.php new file mode 100644 index 0000000..7f2c78e --- /dev/null +++ b/backend/app/User/UseCases/SignupUser/SignupUser.php @@ -0,0 +1,57 @@ +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, + )); + } +} diff --git a/backend/app/User/UseCases/SignupUser/SignupUserRequest.php b/backend/app/User/UseCases/SignupUser/SignupUserRequest.php new file mode 100644 index 0000000..b6f809f --- /dev/null +++ b/backend/app/User/UseCases/SignupUser/SignupUserRequest.php @@ -0,0 +1,11 @@ +