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 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();