diff --git a/src/main/java/org/fontory/fontorybe/authentication/domain/exception/AuthenticationRequiredException.java b/src/main/java/org/fontory/fontorybe/authentication/domain/exception/AuthenticationRequiredException.java new file mode 100644 index 0000000..26a9f8f --- /dev/null +++ b/src/main/java/org/fontory/fontorybe/authentication/domain/exception/AuthenticationRequiredException.java @@ -0,0 +1,10 @@ +package org.fontory.fontorybe.authentication.domain.exception; + +import org.fontory.fontorybe.common.domain.SkipDiscordNotification; + +@SkipDiscordNotification +public class AuthenticationRequiredException extends RuntimeException { + public AuthenticationRequiredException() { + super("Authentication required"); + } +} diff --git a/src/main/java/org/fontory/fontorybe/common/adapter/inbound/GlobalExceptionHandler.java b/src/main/java/org/fontory/fontorybe/common/adapter/inbound/GlobalExceptionHandler.java index f014499..534c869 100644 --- a/src/main/java/org/fontory/fontorybe/common/adapter/inbound/GlobalExceptionHandler.java +++ b/src/main/java/org/fontory/fontorybe/common/adapter/inbound/GlobalExceptionHandler.java @@ -4,6 +4,7 @@ import io.jsonwebtoken.JwtException; import io.jsonwebtoken.MalformedJwtException; import lombok.RequiredArgsConstructor; +import org.fontory.fontorybe.authentication.domain.exception.AuthenticationRequiredException; import org.fontory.fontorybe.authentication.domain.exception.InvalidRefreshTokenException; import org.fontory.fontorybe.authentication.domain.exception.TokenNotFoundException; import org.fontory.fontorybe.bookmark.domain.exception.BookmarkAlreadyException; @@ -169,4 +170,10 @@ public BaseErrorResponse fileNotFoundException(FileNotFoundException e) { public BaseErrorResponse containsBadWordException(Exception e) { return new BaseErrorResponse(e.getMessage()); } + + @ResponseStatus(HttpStatus.UNAUTHORIZED) + @ExceptionHandler(AuthenticationRequiredException.class) + public BaseErrorResponse authenticationRequiredException(AuthenticationRequiredException e) { + return new BaseErrorResponse(e.getMessage()); + } } diff --git a/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java b/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java index 6281204..4c2c12d 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java @@ -10,6 +10,7 @@ import org.fontory.fontorybe.authentication.adapter.inbound.annotation.Login; import org.fontory.fontorybe.authentication.application.AuthService; import org.fontory.fontorybe.authentication.domain.UserPrincipal; +import org.fontory.fontorybe.authentication.domain.exception.AuthenticationRequiredException; import org.fontory.fontorybe.file.application.port.CloudStorageService; import org.fontory.fontorybe.file.application.port.FileService; import org.fontory.fontorybe.file.domain.FileUploadResult; @@ -20,6 +21,7 @@ import org.fontory.fontorybe.member.controller.port.MemberLookupService; import org.fontory.fontorybe.member.controller.port.MemberUpdateService; import org.fontory.fontorybe.member.domain.Member; +import org.fontory.fontorybe.member.infrastructure.entity.MemberStatus; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -54,6 +56,9 @@ public ResponseEntity getMyProfile( log.info("Request received: getMyInfo member ID: {}", requestMemberId); Member lookupMember = memberLookupService.getOrThrowById(requestMemberId); + if (lookupMember.getStatus().equals(MemberStatus.ONBOARDING)) { + throw new AuthenticationRequiredException(); + } String fileUrl = cloudStorageService.getProfileImageUrl(lookupMember.getProfileImageKey()); log.info("ProfileImageUrl generated : {}", fileUrl);