From c88b9c0ebbadd51ece9c49e386dafa45875a7531 Mon Sep 17 00:00:00 2001 From: handwoong Date: Mon, 29 Dec 2025 02:09:00 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=EC=9D=B4=20=EC=99=84=EB=A3=8C=EB=90=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EC=9D=80=20=EA=B3=84=EC=A0=95=20=EC=97=90=EB=9F=AC=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/api/owner/AccountApiSpecification.java | 4 ++++ .../com/everyonewaiter/domain/account/Account.java | 8 +++++++- .../NotCompleteEmailVerificationException.java | 12 ++++++++++++ .../com/everyonewaiter/domain/shared/ErrorCode.java | 1 + .../everyonewaiter/domain/account/AccountTest.java | 2 ++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/everyonewaiter/domain/account/NotCompleteEmailVerificationException.java diff --git a/src/main/java/com/everyonewaiter/adapter/web/api/owner/AccountApiSpecification.java b/src/main/java/com/everyonewaiter/adapter/web/api/owner/AccountApiSpecification.java index 6307ab81..eb1278f0 100644 --- a/src/main/java/com/everyonewaiter/adapter/web/api/owner/AccountApiSpecification.java +++ b/src/main/java/com/everyonewaiter/adapter/web/api/owner/AccountApiSpecification.java @@ -92,6 +92,10 @@ interface AccountApiSpecification { code = ErrorCode.FAILED_SIGN_IN, exampleName = "이메일 및 비밀번호가 일치하지 않는 경우" ), + @ApiErrorResponse( + code = ErrorCode.NOT_COMPLETE_EMAIL_VERIFICATION, + exampleName = "이메일 인증이 완료되지 않은 경우" + ), } ) ResponseEntity signIn(@RequestBody AccountSignInRequest signInRequest); diff --git a/src/main/java/com/everyonewaiter/domain/account/Account.java b/src/main/java/com/everyonewaiter/domain/account/Account.java index f1081f71..a81eb6e4 100644 --- a/src/main/java/com/everyonewaiter/domain/account/Account.java +++ b/src/main/java/com/everyonewaiter/domain/account/Account.java @@ -110,8 +110,14 @@ public void authorize(AccountPermission permission) { } public void signIn(AccountSignInRequest signInRequest, PasswordEncoder passwordEncoder) { - if (isActive() && passwordEncoder.matches(signInRequest.password(), password)) { + boolean isMatched = passwordEncoder.matches(signInRequest.password(), password); + if (isActive() && isMatched) { this.lastSignIn = Instant.now(); + return; + } + + if (isInactive() && isMatched) { + throw new NotCompleteEmailVerificationException(); } else { throw new FailedSignInException(); } diff --git a/src/main/java/com/everyonewaiter/domain/account/NotCompleteEmailVerificationException.java b/src/main/java/com/everyonewaiter/domain/account/NotCompleteEmailVerificationException.java new file mode 100644 index 00000000..b30bd85a --- /dev/null +++ b/src/main/java/com/everyonewaiter/domain/account/NotCompleteEmailVerificationException.java @@ -0,0 +1,12 @@ +package com.everyonewaiter.domain.account; + +import com.everyonewaiter.domain.shared.BusinessException; +import com.everyonewaiter.domain.shared.ErrorCode; + +public class NotCompleteEmailVerificationException extends BusinessException { + + public NotCompleteEmailVerificationException() { + super(ErrorCode.NOT_COMPLETE_EMAIL_VERIFICATION); + } + +} diff --git a/src/main/java/com/everyonewaiter/domain/shared/ErrorCode.java b/src/main/java/com/everyonewaiter/domain/shared/ErrorCode.java index a6cc43ac..fba55a25 100644 --- a/src/main/java/com/everyonewaiter/domain/shared/ErrorCode.java +++ b/src/main/java/com/everyonewaiter/domain/shared/ErrorCode.java @@ -47,6 +47,7 @@ public enum ErrorCode { EXCEED_MAXIMUM_VERIFICATION_PHONE_NUMBER( BAD_REQUEST, "오늘은 더 이상 휴대폰 번호 인증 요청을 할 수 없어요. 내일 다시 시도해 주세요."), EXPIRED_VERIFICATION_PHONE_NUMBER(BAD_REQUEST, "휴대폰 번호 인증이 만료되었어요. 휴대폰 번호 인증을 다시 진행해 주세요."), + NOT_COMPLETE_EMAIL_VERIFICATION(BAD_REQUEST, "이메일 인증이 완료되지 않았어요. 이메일 인증을 진행해 주세요."), ALREADY_VERIFIED_EMAIL(BAD_REQUEST, "이미 이메일 인증이 완료된 계정이에요."), ALREADY_VERIFIED_PHONE_NUMBER(BAD_REQUEST, "이미 휴대폰 번호 인증이 완료되었어요. 다음 절차를 진행해 주세요."), UNMATCHED_VERIFICATION_CODE(BAD_REQUEST, "인증 번호가 일치하지 않아요. 입력하신 인증 번호를 확인해 주세요."), diff --git a/src/test/java/com/everyonewaiter/domain/account/AccountTest.java b/src/test/java/com/everyonewaiter/domain/account/AccountTest.java index 2e9e8c7f..901a041d 100644 --- a/src/test/java/com/everyonewaiter/domain/account/AccountTest.java +++ b/src/test/java/com/everyonewaiter/domain/account/AccountTest.java @@ -128,6 +128,8 @@ void signInFail() { Account account = Account.create(createAccountCreateRequest(), passwordEncoder); assertThatThrownBy(() -> account.signIn(createAccountSignInRequest(), passwordEncoder)) + .isInstanceOf(NotCompleteEmailVerificationException.class); + assertThatThrownBy(() -> account.signIn(createAccountSignInRequest("invalid"), passwordEncoder)) .isInstanceOf(FailedSignInException.class); account.activate(); From f2e1ac9b1cc030980d22f5419edb2a7adaec7ec2 Mon Sep 17 00:00:00 2001 From: handwoong Date: Mon, 29 Dec 2025 02:09:48 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=EB=B2=84=EC=A0=84=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 176ff111..a0e5137e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ services: everyonewaiter-api: container_name: everyonewaiter-api build: . - image: everyonewaiter-api:1.0.6 + image: everyonewaiter-api:1.0.7 ports: - "8081:8081" volumes: diff --git a/gradle.properties b/gradle.properties index 0bad0d84..f401b10c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Artifact appGroup=com.everyonewaiter -appVersion=1.0.6 +appVersion=1.0.7 # Plugin springBoot=3.5.4