diff --git a/src/main/java/kr/modusplant/domains/account/email/adapter/EmailIdentityTokenHelper.java b/src/main/java/kr/modusplant/domains/account/email/adapter/EmailIdentityTokenHelper.java index 17448f077..befa83b44 100644 --- a/src/main/java/kr/modusplant/domains/account/email/adapter/EmailIdentityTokenHelper.java +++ b/src/main/java/kr/modusplant/domains/account/email/adapter/EmailIdentityTokenHelper.java @@ -4,12 +4,13 @@ import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; +import kr.modusplant.domains.account.email.domain.exception.enums.EmailIdentityErrorCode; import kr.modusplant.domains.account.email.usecase.request.EmailValidationRequest; import kr.modusplant.infrastructure.jwt.enums.TokenScope; import kr.modusplant.infrastructure.jwt.exception.InvalidTokenException; import kr.modusplant.infrastructure.jwt.exception.TokenExpiredException; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -76,10 +77,10 @@ public void validateAuthCodeAccessToken(EmailValidationRequest verifyEmailReques // 인증코드, 이메일 일치 검증 if (!verifyCode.equals(payloadVerifyCode)) { - throw new InvalidDataException(ErrorCode.INVALID_EMAIL_VERIFY_CODE, "verifyCode"); + throw new InvalidValueException(EmailIdentityErrorCode.INVALID_EMAIL_VERIFY_CODE, "verifyCode"); } if (!email.equals(claims.get("email", String.class))) { - throw new InvalidDataException(ErrorCode.FORBIDDEN_EMAIL, "email"); + throw new InvalidValueException(EmailIdentityErrorCode.FORBIDDEN_EMAIL, "email"); } } catch (ExpiredJwtException e) { throw new TokenExpiredException(); @@ -121,7 +122,7 @@ public void validateResetPasswordEmailAccessToken(String email, String jwtToken) // 이메일 일치 검증 if (!email.equals(claims.get("email", String.class))) { - throw new InvalidDataException(ErrorCode.FORBIDDEN_EMAIL, "email"); + throw new InvalidValueException(EmailIdentityErrorCode.FORBIDDEN_EMAIL, "email"); } } catch (ExpiredJwtException e) { throw new TokenExpiredException(); diff --git a/src/main/java/kr/modusplant/domains/account/email/adapter/controller/EmailIdentityController.java b/src/main/java/kr/modusplant/domains/account/email/adapter/controller/EmailIdentityController.java index ca48a034e..6475be269 100644 --- a/src/main/java/kr/modusplant/domains/account/email/adapter/controller/EmailIdentityController.java +++ b/src/main/java/kr/modusplant/domains/account/email/adapter/controller/EmailIdentityController.java @@ -9,9 +9,9 @@ import kr.modusplant.domains.account.email.usecase.request.EmailValidationRequest; import kr.modusplant.domains.account.email.usecase.request.InputValidationRequest; import kr.modusplant.domains.account.normal.domain.exception.InvalidValueException; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; import kr.modusplant.framework.redis.RedisHelper; import kr.modusplant.framework.redis.RedisKeys; -import kr.modusplant.shared.exception.EntityNotFoundException; import kr.modusplant.shared.kernel.Email; import kr.modusplant.shared.kernel.Password; import lombok.RequiredArgsConstructor; @@ -23,7 +23,6 @@ import static kr.modusplant.framework.redis.RedisKeys.RESET_PASSWORD_PREFIX; import static kr.modusplant.infrastructure.jwt.enums.TokenScope.RESET_PASSWORD_INPUT; -import static kr.modusplant.shared.exception.enums.ErrorCode.PASSWORD_RESET_EMAIL_VERIFY_FAIL; @Slf4j @RequiredArgsConstructor @@ -49,7 +48,7 @@ public void sendResetPasswordEmail(EmailIdentityRequest request) { String email = request.email(); if (!repository.existsByEmailAndProvider(Email.create(email))) { - throw new EntityNotFoundException(EmailIdentityErrorCode.MEMBER_NOT_FOUND_WITH_EMAIL, "email"); + throw new NotFoundEntityException(EmailIdentityErrorCode.MEMBER_NOT_FOUND_WITH_EMAIL, "email"); } UUID uuid = UUID.randomUUID(); @@ -69,7 +68,7 @@ public String verifyResetPasswordEmail(UUID uuid) { String stringUuid = String.valueOf(uuid); String redisKey = RedisKeys.generateRedisKey(RESET_PASSWORD_PREFIX, stringUuid); String storedEmail = redisHelper.getString(redisKey) - .orElseThrow(() -> new InvalidValueException(PASSWORD_RESET_EMAIL_VERIFY_FAIL)); + .orElseThrow(() -> new InvalidValueException(EmailIdentityErrorCode.INVALID_EMAIL_VERIFY_LINK)); return tokenHelper.generateResetPasswordAccessToken(storedEmail, stringUuid, RESET_PASSWORD_INPUT); } diff --git a/src/main/java/kr/modusplant/domains/account/email/domain/exception/enums/EmailIdentityErrorCode.java b/src/main/java/kr/modusplant/domains/account/email/domain/exception/enums/EmailIdentityErrorCode.java index 80bd4b041..d4541b7bf 100644 --- a/src/main/java/kr/modusplant/domains/account/email/domain/exception/enums/EmailIdentityErrorCode.java +++ b/src/main/java/kr/modusplant/domains/account/email/domain/exception/enums/EmailIdentityErrorCode.java @@ -10,7 +10,11 @@ public enum EmailIdentityErrorCode implements ErrorCode { NOT_SENDABLE_EMAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "not_sendable_email", "서버에서 이메일을 보낼 수 없습니다"), - MEMBER_NOT_FOUND_WITH_EMAIL(HttpStatus.BAD_REQUEST.value(), "member_not_found_with_email", "해당 이메일을 가진 사용자가 존재하지 않습니다"); + MEMBER_NOT_FOUND_WITH_EMAIL(HttpStatus.BAD_REQUEST.value(), "member_not_found_with_email", "해당 이메일을 가진 사용자가 존재하지 않습니다"), + FORBIDDEN_EMAIL(HttpStatus.FORBIDDEN.value(), "forbidden_email", "해당 이메일에 접근할 수 없습니다"), + INVALID_EMAIL_VERIFY_CODE(HttpStatus.FORBIDDEN.value(), "invalid_email_verify_code", "이메일의 검증 코드가 올바르지 않습니다"), + INVALID_EMAIL_VERIFY_LINK(HttpStatus.BAD_REQUEST.value(), "invalid_email_verify_link","유효하지 않거나 만료된 링크입니다") + ; private final int httpStatus; private final String code; diff --git a/src/main/java/kr/modusplant/domains/account/email/domain/vo/MailjetEmail.java b/src/main/java/kr/modusplant/domains/account/email/domain/vo/MailjetEmail.java index 0ef12ae55..1ee5c462c 100644 --- a/src/main/java/kr/modusplant/domains/account/email/domain/vo/MailjetEmail.java +++ b/src/main/java/kr/modusplant/domains/account/email/domain/vo/MailjetEmail.java @@ -1,7 +1,8 @@ package kr.modusplant.domains.account.email.domain.vo; -import kr.modusplant.shared.exception.EmptyEmailException; -import kr.modusplant.shared.exception.InvalidEmailException; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -17,9 +18,9 @@ public class MailjetEmail { public static MailjetEmail create(String email) { if (email == null || email.isBlank()) { - throw new EmptyEmailException(); + throw new EmptyValueException(KernelErrorCode.EMPTY_EMAIL, "email"); } else if (!PATTERN_EMAIL.matcher(email).matches()) { - throw new InvalidEmailException(); + throw new InvalidValueException(KernelErrorCode.INVALID_EMAIL_FORMAT, "email"); } return new MailjetEmail(email); } diff --git a/src/main/java/kr/modusplant/domains/account/identity/domain/exception/EmptyValueException.java b/src/main/java/kr/modusplant/domains/account/identity/domain/exception/EmptyValueException.java deleted file mode 100644 index 69aa136aa..000000000 --- a/src/main/java/kr/modusplant/domains/account/identity/domain/exception/EmptyValueException.java +++ /dev/null @@ -1,15 +0,0 @@ -package kr.modusplant.domains.account.identity.domain.exception; - -import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.supers.ErrorCode; - -public class EmptyValueException extends BusinessException { - - public EmptyValueException(ErrorCode errorCode) { - super(errorCode); - } - - public EmptyValueException(ErrorCode errorCode, String message) { - super(errorCode, message); - } -} diff --git a/src/main/java/kr/modusplant/domains/account/identity/domain/exception/InvalidValueException.java b/src/main/java/kr/modusplant/domains/account/identity/domain/exception/InvalidValueException.java deleted file mode 100644 index ee7deaf4a..000000000 --- a/src/main/java/kr/modusplant/domains/account/identity/domain/exception/InvalidValueException.java +++ /dev/null @@ -1,14 +0,0 @@ -package kr.modusplant.domains.account.identity.domain.exception; - -import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.supers.ErrorCode; - -public class InvalidValueException extends BusinessException { - public InvalidValueException(ErrorCode errorCode) { - super(errorCode); - } - - public InvalidValueException(ErrorCode errorCode, String message) { - super(errorCode, message); - } -} diff --git a/src/main/java/kr/modusplant/domains/account/normal/adapter/controller/NormalIdentityController.java b/src/main/java/kr/modusplant/domains/account/normal/adapter/controller/NormalIdentityController.java index fdacb756e..7ad127e51 100644 --- a/src/main/java/kr/modusplant/domains/account/normal/adapter/controller/NormalIdentityController.java +++ b/src/main/java/kr/modusplant/domains/account/normal/adapter/controller/NormalIdentityController.java @@ -9,12 +9,13 @@ import kr.modusplant.domains.account.normal.usecase.request.NormalSignUpRequest; import kr.modusplant.domains.account.normal.usecase.request.PasswordModificationRequest; import kr.modusplant.domains.account.shared.kernel.AccountId; -import kr.modusplant.shared.exception.EntityNotFoundException; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import kr.modusplant.shared.kernel.Email; import kr.modusplant.shared.kernel.Nickname; import kr.modusplant.shared.kernel.Password; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import kr.modusplant.shared.persistence.constant.TableName; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.crypto.password.PasswordEncoder; @@ -22,6 +23,8 @@ import java.util.UUID; +import static kr.modusplant.framework.jpa.exception.enums.EntityErrorCode.EXISTS_MEMBER; + @Service public class NormalIdentityController { @@ -46,9 +49,9 @@ public NormalIdentityController(NormalIdentityMapper mapper, public void registerNormalMember(NormalSignUpRequest request) { if(readRepository.existsByEmail(Email.create(request.email()))) { - throw new DataAlreadyExistsException(ErrorCode.MEMBER_EXISTS); + throw new DataAlreadyExistsException(EXISTS_MEMBER); } else if(readRepository.existsByNickname(Nickname.create(request.nickname()))) { - throw new DataAlreadyExistsException(ErrorCode.NICKNAME_EXISTS); + throw new DataAlreadyExistsException(KernelErrorCode.EXISTS_NICKNAME); } else { createRepository.save(mapper.toSignUpData(request)); } @@ -56,7 +59,7 @@ public void registerNormalMember(NormalSignUpRequest request) { public void modifyEmail(UUID memberActiveUuid, EmailModificationRequest request) { if(!readRepository.existsByEmail(Email.create(request.currentEmail()))) { - throw new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND, TableName.SITE_MEMBER_AUTH); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER, TableName.SITE_MEMBER_AUTH); } else { updateRepository.updateEmail(AccountId.create(memberActiveUuid), Email.create(request.newEmail())); } @@ -64,9 +67,9 @@ public void modifyEmail(UUID memberActiveUuid, EmailModificationRequest request) public void modifyPassword(UUID memberActiveUuid, PasswordModificationRequest request) { if(!readRepository.existsByMemberId(AccountId.create(memberActiveUuid))) { - throw new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND, TableName.SITE_MEMBER_AUTH); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER, TableName.SITE_MEMBER_AUTH); } else if(!isPasswordsMatch(AccountId.create(memberActiveUuid), Password.create(request.currentPw()))) { - throw new InvalidDataException(ErrorCode.INVALID_PASSWORD, request.currentPw()); + throw new InvalidValueException(KernelErrorCode.INVALID_PASSWORD_FORMAT, request.currentPw()); } else { updateRepository.updatePassword(AccountId.create(memberActiveUuid), Password.create(request.newPw())); } diff --git a/src/main/java/kr/modusplant/domains/account/social/domain/exception/enums/SocialIdentityErrorCode.java b/src/main/java/kr/modusplant/domains/account/social/domain/exception/enums/SocialIdentityErrorCode.java index b5848592f..344684e08 100644 --- a/src/main/java/kr/modusplant/domains/account/social/domain/exception/enums/SocialIdentityErrorCode.java +++ b/src/main/java/kr/modusplant/domains/account/social/domain/exception/enums/SocialIdentityErrorCode.java @@ -11,7 +11,10 @@ public enum SocialIdentityErrorCode implements ErrorCode { EMPTY_PROVIDER(HttpStatus.BAD_REQUEST.value(), "empty_provider", "제공자가 비어 있습니다. "), INVALID_PROVIDER(HttpStatus.BAD_REQUEST.value(), "invalid_provider", "제공자가 유효하지 않습니다. "), EMPTY_PROVIDER_ID(HttpStatus.BAD_REQUEST.value(), "empty_provider_id", "제공자 id가 비어 있습니다. "), - INVALID_PROVIDER_ID(HttpStatus.BAD_REQUEST.value(), "invalid_provider_id", "제공자 id가 유효하지 않습니다. "); + INVALID_PROVIDER_ID(HttpStatus.BAD_REQUEST.value(), "invalid_provider_id", "제공자 id가 유효하지 않습니다. "), + UNSUPPORTED_SOCIAL_PROVIDER(HttpStatus.FORBIDDEN.value(), "unsupported_social_provider", "지원되지 않는 소셜 로그인 방식입니다"), + GOOGLE_LOGIN_FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "google_login_fail", "구글 로그인 요청에 실패했습니다"), + KAKAO_LOGIN_FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "kakao_login_fail","카카오 로그인 요청에 실패했습니다"); private final int httpStatus; private final String code; diff --git a/src/main/java/kr/modusplant/domains/account/social/framework/out/client/GoogleAuthClient.java b/src/main/java/kr/modusplant/domains/account/social/framework/out/client/GoogleAuthClient.java index 36105d2a2..b37ba51b1 100644 --- a/src/main/java/kr/modusplant/domains/account/social/framework/out/client/GoogleAuthClient.java +++ b/src/main/java/kr/modusplant/domains/account/social/framework/out/client/GoogleAuthClient.java @@ -1,9 +1,9 @@ package kr.modusplant.domains.account.social.framework.out.client; +import kr.modusplant.domains.account.social.domain.exception.enums.SocialIdentityErrorCode; import kr.modusplant.domains.account.social.framework.out.client.dto.GoogleUserInfo; import kr.modusplant.domains.account.social.framework.out.exception.OAuthRequestFailException; import kr.modusplant.domains.account.social.usecase.port.client.SocialAuthClient; -import kr.modusplant.shared.exception.enums.ErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; @@ -50,7 +50,7 @@ public String getAccessToken(String code) { .body(formData) .retrieve() .onStatus(this::isErrorStatus, (request, response) -> { - throw new OAuthRequestFailException(ErrorCode.GOOGLE_LOGIN_FAIL, "google"); + throw new OAuthRequestFailException(SocialIdentityErrorCode.GOOGLE_LOGIN_FAIL, "google"); }) .body(Map.class) .get("access_token").toString(); @@ -67,7 +67,7 @@ public GoogleUserInfo getUserInfo(String accessToken) { .uri("/userinfo/v2/me") .retrieve() .onStatus(this::isErrorStatus, (request, response) -> { - throw new OAuthRequestFailException(ErrorCode.GOOGLE_LOGIN_FAIL, "google"); + throw new OAuthRequestFailException(SocialIdentityErrorCode.GOOGLE_LOGIN_FAIL, "google"); }) .body(GoogleUserInfo.class); } diff --git a/src/main/java/kr/modusplant/domains/account/social/framework/out/client/KakaoAuthClient.java b/src/main/java/kr/modusplant/domains/account/social/framework/out/client/KakaoAuthClient.java index 01f3706a6..46f600c87 100644 --- a/src/main/java/kr/modusplant/domains/account/social/framework/out/client/KakaoAuthClient.java +++ b/src/main/java/kr/modusplant/domains/account/social/framework/out/client/KakaoAuthClient.java @@ -1,9 +1,9 @@ package kr.modusplant.domains.account.social.framework.out.client; +import kr.modusplant.domains.account.social.domain.exception.enums.SocialIdentityErrorCode; import kr.modusplant.domains.account.social.framework.out.client.dto.KakaoUserInfo; import kr.modusplant.domains.account.social.framework.out.exception.OAuthRequestFailException; import kr.modusplant.domains.account.social.usecase.port.client.SocialAuthClient; -import kr.modusplant.shared.exception.enums.ErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; @@ -47,7 +47,7 @@ public String getAccessToken(String code) { .body(formData) .retrieve() .onStatus(this::isErrorStatus, (request, response) -> { - throw new OAuthRequestFailException(ErrorCode.KAKAO_LOGIN_FAIL, "kakao"); + throw new OAuthRequestFailException(SocialIdentityErrorCode.KAKAO_LOGIN_FAIL, "kakao"); }) .body(Map.class) .get("access_token").toString(); @@ -64,7 +64,7 @@ public KakaoUserInfo getUserInfo(String accessToken) { .uri("/v2/user/me") .retrieve() .onStatus(this::isErrorStatus, (request, response) -> { - throw new OAuthRequestFailException(ErrorCode.KAKAO_LOGIN_FAIL, "kakao"); + throw new OAuthRequestFailException(SocialIdentityErrorCode.KAKAO_LOGIN_FAIL, "kakao"); }) .body(KakaoUserInfo.class); } diff --git a/src/main/java/kr/modusplant/domains/account/social/framework/out/exception/OAuthRequestFailException.java b/src/main/java/kr/modusplant/domains/account/social/framework/out/exception/OAuthRequestFailException.java index 8dbb9a7a7..26b873d20 100644 --- a/src/main/java/kr/modusplant/domains/account/social/framework/out/exception/OAuthRequestFailException.java +++ b/src/main/java/kr/modusplant/domains/account/social/framework/out/exception/OAuthRequestFailException.java @@ -1,7 +1,7 @@ package kr.modusplant.domains.account.social.framework.out.exception; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.supers.ErrorCode; import lombok.Getter; @Getter diff --git a/src/main/java/kr/modusplant/domains/account/social/framework/out/exception/UnsupportedSocialProviderException.java b/src/main/java/kr/modusplant/domains/account/social/framework/out/exception/UnsupportedSocialProviderException.java index 72af0c41d..8c2f08a96 100644 --- a/src/main/java/kr/modusplant/domains/account/social/framework/out/exception/UnsupportedSocialProviderException.java +++ b/src/main/java/kr/modusplant/domains/account/social/framework/out/exception/UnsupportedSocialProviderException.java @@ -1,10 +1,10 @@ package kr.modusplant.domains.account.social.framework.out.exception; +import kr.modusplant.domains.account.social.domain.exception.enums.SocialIdentityErrorCode; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; public class UnsupportedSocialProviderException extends BusinessException { public UnsupportedSocialProviderException() { - super(ErrorCode.UNSUPPORTED_SOCIAL_PROVIDER); + super(SocialIdentityErrorCode.UNSUPPORTED_SOCIAL_PROVIDER); } } diff --git a/src/main/java/kr/modusplant/domains/account/social/framework/out/jpa/repository/SocialIdentityRepositoryJpaAdapter.java b/src/main/java/kr/modusplant/domains/account/social/framework/out/jpa/repository/SocialIdentityRepositoryJpaAdapter.java index 7f0d0dbe9..b34116b1a 100644 --- a/src/main/java/kr/modusplant/domains/account/social/framework/out/jpa/repository/SocialIdentityRepositoryJpaAdapter.java +++ b/src/main/java/kr/modusplant/domains/account/social/framework/out/jpa/repository/SocialIdentityRepositoryJpaAdapter.java @@ -9,12 +9,12 @@ import kr.modusplant.framework.jpa.entity.SiteMemberAuthEntity; import kr.modusplant.framework.jpa.entity.SiteMemberEntity; import kr.modusplant.framework.jpa.entity.SiteMemberRoleEntity; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.SiteMemberAuthJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberRoleJpaRepository; import kr.modusplant.infrastructure.security.enums.Role; -import kr.modusplant.shared.exception.EntityNotFoundException; -import kr.modusplant.shared.exception.enums.ErrorCode; import kr.modusplant.shared.persistence.constant.TableName; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -39,10 +39,10 @@ public Optional getMemberIdBySocialCredentials(SocialCredentials soci @Override public SocialAccountPayload getUserPayloadByMemberId(AccountId accountId) { SiteMemberEntity memberEntity = memberJpaRepository.findByUuid(accountId.getValue()) - .orElseThrow(() -> new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND, TableName.SITE_MEMBER)); + .orElseThrow(() -> new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER, TableName.SITE_MEMBER)); SiteMemberAuthEntity memberAuthEntity = memberAuthJpaRepository.findByActiveMember(memberEntity).getFirst(); SiteMemberRoleEntity memberRoleEntity = memberRoleJpaRepository.findByMember(memberEntity) - .orElseThrow(() -> new EntityNotFoundException(ErrorCode.MEMBER_ROLE_NOT_FOUND, TableName.SITE_MEMBER_ROLE)); + .orElseThrow(() -> new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER_ROLE, TableName.SITE_MEMBER_ROLE)); return socialIdentityJpaMapper.toUserPayload(memberEntity,memberAuthEntity,memberRoleEntity); } diff --git a/src/main/java/kr/modusplant/domains/comment/adapter/controller/CommentController.java b/src/main/java/kr/modusplant/domains/comment/adapter/controller/CommentController.java index fd107cb93..2fe7cf925 100644 --- a/src/main/java/kr/modusplant/domains/comment/adapter/controller/CommentController.java +++ b/src/main/java/kr/modusplant/domains/comment/adapter/controller/CommentController.java @@ -17,11 +17,11 @@ import kr.modusplant.domains.comment.usecase.response.CommentOfPostResponse; import kr.modusplant.domains.comment.usecase.response.CommentPageResponse; import kr.modusplant.domains.member.domain.vo.MemberId; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.CommPostJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberJpaRepository; import kr.modusplant.infrastructure.swear.service.SwearService; -import kr.modusplant.shared.exception.EntityNotFoundException; -import kr.modusplant.shared.exception.enums.ErrorCode; import kr.modusplant.shared.persistence.compositekey.CommCommentId; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -58,7 +58,7 @@ public CommentCacheData getCacheData(UUID memberUuid, String ifNoneMatch, String public List gatherByPost(String postUlid) { if(!postJpaRepository.existsByUlid(postUlid)) { - throw new EntityNotFoundException(ErrorCode.POST_NOT_FOUND, "post"); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_POST, "post"); } return jooqRepository.findByPost(PostId.create(postUlid)) @@ -68,7 +68,7 @@ public List gatherByPost(String postUlid) { public CommentPageResponse gatherByAuthor(UUID memberUuid, Pageable pageable) { if(!memberJpaRepository.existsById(memberUuid)) { - throw new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND, "member"); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER, "member"); } PageImpl result = jooqRepository.findByAuthor(Author.create(memberUuid), pageable); diff --git a/src/main/java/kr/modusplant/domains/comment/framework/in/web/cache/CommentCacheService.java b/src/main/java/kr/modusplant/domains/comment/framework/in/web/cache/CommentCacheService.java index d5da08414..0564a98b9 100644 --- a/src/main/java/kr/modusplant/domains/comment/framework/in/web/cache/CommentCacheService.java +++ b/src/main/java/kr/modusplant/domains/comment/framework/in/web/cache/CommentCacheService.java @@ -7,10 +7,10 @@ import kr.modusplant.domains.member.domain.vo.MemberId; import kr.modusplant.framework.jpa.entity.CommPostEntity; import kr.modusplant.framework.jpa.entity.SiteMemberEntity; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.CommPostJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberJpaRepository; -import kr.modusplant.shared.exception.EntityNotFoundException; -import kr.modusplant.shared.exception.enums.ErrorCode; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.crypto.password.PasswordEncoder; @@ -46,7 +46,7 @@ public CommentCacheData getCacheData( @Nonnull PostId postUlid ) { CommPostEntity postEntity = postJpaRepository.findByUlid(postUlid.getId()) - .orElseThrow( () -> new EntityNotFoundException(ErrorCode.POST_NOT_FOUND, "post")); + .orElseThrow( () -> new NotFoundEntityException(EntityErrorCode.NOT_FOUND_POST, "post")); String ETagSource = postEntity.getETagSource(); LocalDateTime lastModifiedAt = postEntity.getUpdatedAtAsTruncatedToSeconds(); @@ -60,7 +60,7 @@ public CommentCacheData getCacheData( @Nonnull MemberId memberId ) { SiteMemberEntity memberEntity = memberJpaRepository.findByUuid(memberId.getValue()) - .orElseThrow(() -> new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND, "member")); + .orElseThrow(() -> new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER, "member")); String ETagSource = memberEntity.getETagSource(); LocalDateTime lastModifiedAt = memberEntity.getLastModifiedAtAsTruncatedToSeconds(); diff --git a/src/main/java/kr/modusplant/domains/member/adapter/controller/MemberController.java b/src/main/java/kr/modusplant/domains/member/adapter/controller/MemberController.java index 9af32bf6d..169e3bda5 100644 --- a/src/main/java/kr/modusplant/domains/member/adapter/controller/MemberController.java +++ b/src/main/java/kr/modusplant/domains/member/adapter/controller/MemberController.java @@ -17,14 +17,16 @@ import kr.modusplant.domains.member.usecase.response.MemberProfileResponse; import kr.modusplant.domains.member.usecase.response.MemberResponse; import kr.modusplant.framework.aws.service.S3FileService; +import kr.modusplant.framework.jpa.exception.ExistsEntityException; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.infrastructure.event.bus.EventBus; import kr.modusplant.infrastructure.swear.exception.SwearContainedException; import kr.modusplant.infrastructure.swear.service.SwearService; import kr.modusplant.shared.event.*; -import kr.modusplant.shared.exception.EntityExistsException; -import kr.modusplant.shared.exception.EntityNotFoundException; import kr.modusplant.shared.exception.NotAccessibleException; import kr.modusplant.shared.kernel.Nickname; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -36,8 +38,6 @@ import static kr.modusplant.domains.member.adapter.util.MemberProfileImageUtils.generateMemberProfileImagePath; import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.*; -import static kr.modusplant.shared.exception.enums.ErrorCode.MEMBER_PROFILE_NOT_FOUND; -import static kr.modusplant.shared.exception.enums.ErrorCode.NICKNAME_EXISTS; @SuppressWarnings("LoggingSimilarMessage") @RequiredArgsConstructor @@ -72,13 +72,13 @@ public MemberProfileResponse getProfile(MemberProfileGetRecord record) throws IO MemberId memberId = MemberId.fromUuid(record.id()); Optional optionalMember = memberRepository.getById(memberId); if (optionalMember.isEmpty()) { - throw new EntityNotFoundException(NOT_FOUND_MEMBER_ID, "memberId"); + throw new NotFoundEntityException(NOT_FOUND_MEMBER_ID, "memberId"); } Optional optionalMemberProfile = memberProfileRepository.getById(memberId); if (optionalMemberProfile.isPresent()) { return memberProfileMapper.toMemberProfileResponse(optionalMemberProfile.orElseThrow()); } else { - throw new EntityNotFoundException(MEMBER_PROFILE_NOT_FOUND, "memberProfile"); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER_PROFILE, "memberProfile"); } } @@ -100,7 +100,7 @@ public MemberProfileResponse overrideProfile(MemberProfileOverrideRecord record) s3FileService.deleteFiles(imagePath); } } else { - throw new EntityNotFoundException(MEMBER_PROFILE_NOT_FOUND, "memberProfile"); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER_PROFILE, "memberProfile"); } if (!(image == null)) { String newImagePath = uploadImage(memberId, record); @@ -177,29 +177,29 @@ public void unlikeComment(MemberCommentUnlikeRecord record) { private void validateBeforeRegister(Nickname nickname) { if (memberRepository.isNicknameExist(nickname)) { - throw new EntityExistsException(NICKNAME_EXISTS, "nickname"); + throw new ExistsEntityException(KernelErrorCode.EXISTS_NICKNAME, "nickname"); } } private void validateBeforeOverrideProfile(MemberId memberId, Nickname memberNickname) { if (!memberRepository.isIdExist(memberId)) { - throw new EntityNotFoundException(NOT_FOUND_MEMBER_ID, "memberId"); + throw new NotFoundEntityException(NOT_FOUND_MEMBER_ID, "memberId"); } if (swearService.isSwearContained(memberNickname.getValue())) { throw new SwearContainedException(); } Optional emptyOrMember = memberRepository.getByNickname(memberNickname); if (emptyOrMember.isPresent() && !emptyOrMember.orElseThrow().getMemberId().equals(memberId)) { - throw new EntityExistsException(NICKNAME_EXISTS, "memberNickname"); + throw new ExistsEntityException(KernelErrorCode.EXISTS_NICKNAME, "memberNickname"); } } private void validateBeforeLikeOrUnlikePost(MemberId memberId, TargetPostId targetPostId) { if (!memberRepository.isIdExist(memberId)) { - throw new EntityNotFoundException(NOT_FOUND_MEMBER_ID, "memberId"); + throw new NotFoundEntityException(NOT_FOUND_MEMBER_ID, "memberId"); } if (!targetPostIdRepository.isIdExist(targetPostId)) { - throw new EntityNotFoundException(NOT_FOUND_TARGET_POST_ID, "targetPostId"); + throw new NotFoundEntityException(NOT_FOUND_TARGET_POST_ID, "targetPostId"); } if (!targetPostIdRepository.isPublished(targetPostId)) { throw new NotAccessibleException(NOT_ACCESSIBLE_POST_LIKE, "postLike", targetPostId.getValue()); @@ -208,10 +208,10 @@ private void validateBeforeLikeOrUnlikePost(MemberId memberId, TargetPostId targ private void validateBeforeBookmarkOrCancelBookmark(MemberId memberId, TargetPostId targetPostId) { if (!memberRepository.isIdExist(memberId)) { - throw new EntityNotFoundException(NOT_FOUND_MEMBER_ID, "memberId"); + throw new NotFoundEntityException(NOT_FOUND_MEMBER_ID, "memberId"); } if (!targetPostIdRepository.isIdExist(targetPostId)) { - throw new EntityNotFoundException(NOT_FOUND_TARGET_POST_ID, "targetPostId"); + throw new NotFoundEntityException(NOT_FOUND_TARGET_POST_ID, "targetPostId"); } if (!targetPostIdRepository.isPublished(targetPostId)) { throw new NotAccessibleException(NOT_ACCESSIBLE_POST_BOOKMARK, "postBookmark", targetPostId.getValue()); @@ -220,10 +220,10 @@ private void validateBeforeBookmarkOrCancelBookmark(MemberId memberId, TargetPos private void validateBeforeLikeOrUnlikeComment(MemberId memberId, TargetCommentId targetCommentId) { if (!memberRepository.isIdExist(memberId)) { - throw new EntityNotFoundException(NOT_FOUND_MEMBER_ID, "memberId"); + throw new NotFoundEntityException(NOT_FOUND_MEMBER_ID, "memberId"); } if (!targetCommentIdRepository.isIdExist(targetCommentId)) { - throw new EntityNotFoundException(NOT_FOUND_TARGET_COMMENT_ID, "targetCommentId"); + throw new NotFoundEntityException(NOT_FOUND_TARGET_COMMENT_ID, "targetCommentId"); } } diff --git a/src/main/java/kr/modusplant/domains/member/domain/aggregate/Member.java b/src/main/java/kr/modusplant/domains/member/domain/aggregate/Member.java index 9e2b173c9..2148129aa 100644 --- a/src/main/java/kr/modusplant/domains/member/domain/aggregate/Member.java +++ b/src/main/java/kr/modusplant/domains/member/domain/aggregate/Member.java @@ -3,9 +3,10 @@ import kr.modusplant.domains.member.domain.vo.MemberBirthDate; import kr.modusplant.domains.member.domain.vo.MemberId; import kr.modusplant.domains.member.domain.vo.MemberStatus; -import kr.modusplant.shared.exception.EmptyNicknameException; +import kr.modusplant.shared.exception.EmptyValueException; import kr.modusplant.shared.exception.EmptyValueException; import kr.modusplant.shared.kernel.Nickname; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -28,7 +29,7 @@ public static Member create(MemberId id, MemberStatus status, Nickname nickname, } else if (status == null) { throw new EmptyValueException(EMPTY_MEMBER_STATUS, "memberStatus"); } else if (nickname == null) { - throw new EmptyNicknameException(); + throw new EmptyValueException(KernelErrorCode.EMPTY_NICKNAME, "nickname"); } else if (birthDate == null) { throw new EmptyValueException(EMPTY_MEMBER_BIRTH_DATE, "memberBirthDate"); } diff --git a/src/main/java/kr/modusplant/domains/member/domain/aggregate/MemberProfile.java b/src/main/java/kr/modusplant/domains/member/domain/aggregate/MemberProfile.java index 696585785..5297b8aae 100644 --- a/src/main/java/kr/modusplant/domains/member/domain/aggregate/MemberProfile.java +++ b/src/main/java/kr/modusplant/domains/member/domain/aggregate/MemberProfile.java @@ -3,9 +3,10 @@ import kr.modusplant.domains.member.domain.entity.MemberProfileImage; import kr.modusplant.domains.member.domain.vo.MemberId; import kr.modusplant.domains.member.domain.vo.MemberProfileIntroduction; -import kr.modusplant.shared.exception.EmptyNicknameException; +import kr.modusplant.shared.exception.EmptyValueException; import kr.modusplant.shared.exception.EmptyValueException; import kr.modusplant.shared.kernel.Nickname; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -30,7 +31,7 @@ public static MemberProfile create(MemberId id, MemberProfileImage profileImage, } else if (profileIntroduction == null) { throw new EmptyValueException(EMPTY_MEMBER_PROFILE_INTRODUCTION, "memberProfileIntroduction"); } else if (nickname == null) { - throw new EmptyNicknameException(); + throw new EmptyValueException(KernelErrorCode.EMPTY_NICKNAME, "nickname"); } return new MemberProfile(id, profileImage, profileIntroduction, nickname); } diff --git a/src/main/java/kr/modusplant/domains/member/domain/exception/enums/MemberErrorCode.java b/src/main/java/kr/modusplant/domains/member/domain/exception/enums/MemberErrorCode.java index 58acfe405..993b73a94 100644 --- a/src/main/java/kr/modusplant/domains/member/domain/exception/enums/MemberErrorCode.java +++ b/src/main/java/kr/modusplant/domains/member/domain/exception/enums/MemberErrorCode.java @@ -19,6 +19,9 @@ public enum MemberErrorCode implements ErrorCode { EMPTY_TARGET_POST_ID(HttpStatus.BAD_REQUEST.value(), "empty_target_post_id", "대상 게시글 아이디가 비어 있습니다. "), INCORRECT_MEMBER_ID(HttpStatus.BAD_REQUEST.value(), "incorrect_member_id", "올바르지 않은 회원 ID를 사용하고 있습니다. "), INVALID_MEMBER_PROFILE_IMAGE_PATH(HttpStatus.BAD_REQUEST.value(), "invalid_member_profile_image_path", "회원 프로필 이미지 경로의 서식이 올바르지 않습니다. "), + INVALID_MEMBER_ID(HttpStatus.BAD_REQUEST.value(), "invalid_member_id", "사용자 식별자의 서식이 올바르지 않습니다."), + INVALID_TARGET_COMMENT_PATH(HttpStatus.BAD_REQUEST.value(), "invalid_target_comment_path", "목표로 하는 댓글 경로의 서식이 올바르지 않습니다."), + INVALID_TARGET_POST_ID(HttpStatus.BAD_REQUEST.value(), "invalid_target_post_id", "목표로 하는 게시글 식별자의 서식이 올바르지 않습니다."), MEMBER_PROFILE_INTRODUCTION_OVER_LENGTH(HttpStatus.BAD_REQUEST.value(), "member_profile_introduction_over_length", "회원 프로필 소개가 허용되는 길이를 초과하였습니다. "), NOT_ACCESSIBLE_POST_BOOKMARK(HttpStatus.BAD_REQUEST.value(), "not_accessible_post_bookmark", "대상 게시글에 대한 북마크 기능을 이용할 수 없습니다. "), NOT_ACCESSIBLE_POST_LIKE(HttpStatus.BAD_REQUEST.value(), "not_accessible_post_like", "대상 게시글에 대한 좋아요 기능을 이용할 수 없습니다. "), diff --git a/src/main/java/kr/modusplant/domains/member/domain/vo/MemberId.java b/src/main/java/kr/modusplant/domains/member/domain/vo/MemberId.java index f103845bf..6452b4a7a 100644 --- a/src/main/java/kr/modusplant/domains/member/domain/vo/MemberId.java +++ b/src/main/java/kr/modusplant/domains/member/domain/vo/MemberId.java @@ -1,8 +1,7 @@ package kr.modusplant.domains.member.domain.vo; import kr.modusplant.shared.exception.EmptyValueException; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -13,6 +12,7 @@ import java.util.UUID; import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.EMPTY_MEMBER_ID; +import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.INVALID_MEMBER_ID; import static kr.modusplant.shared.constant.Regex.PATTERN_UUID; @Getter @@ -35,7 +35,7 @@ public static MemberId fromString(String value) { if (StringUtils.isBlank(value)) { throw new EmptyValueException(EMPTY_MEMBER_ID, "memberId"); } else if (!PATTERN_UUID.matcher(value).matches()) { - throw new InvalidDataException(ErrorCode.INVALID_INPUT, "memberId"); + throw new InvalidValueException(INVALID_MEMBER_ID, "memberId"); } return new MemberId(UUID.fromString(value)); } diff --git a/src/main/java/kr/modusplant/domains/member/domain/vo/MemberProfileIntroduction.java b/src/main/java/kr/modusplant/domains/member/domain/vo/MemberProfileIntroduction.java index 5548655e1..071b1cd43 100644 --- a/src/main/java/kr/modusplant/domains/member/domain/vo/MemberProfileIntroduction.java +++ b/src/main/java/kr/modusplant/domains/member/domain/vo/MemberProfileIntroduction.java @@ -1,7 +1,7 @@ package kr.modusplant.domains.member.domain.vo; -import kr.modusplant.shared.exception.DataLengthException; import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -23,7 +23,7 @@ public static MemberProfileIntroduction create(String value) { if (StringUtils.isBlank(value)) { throw new EmptyValueException(EMPTY_MEMBER_PROFILE_INTRODUCTION, "memberProfileIntroduction"); } else if (value.length() > 60) { - throw new DataLengthException(MEMBER_PROFILE_INTRODUCTION_OVER_LENGTH); + throw new InvalidValueException(MEMBER_PROFILE_INTRODUCTION_OVER_LENGTH, "memberProfileIntroduction"); } return new MemberProfileIntroduction(value); } diff --git a/src/main/java/kr/modusplant/domains/member/domain/vo/TargetCommentPath.java b/src/main/java/kr/modusplant/domains/member/domain/vo/TargetCommentPath.java index 0e2537914..4e6bf7d44 100644 --- a/src/main/java/kr/modusplant/domains/member/domain/vo/TargetCommentPath.java +++ b/src/main/java/kr/modusplant/domains/member/domain/vo/TargetCommentPath.java @@ -1,8 +1,7 @@ package kr.modusplant.domains.member.domain.vo; import kr.modusplant.shared.exception.EmptyValueException; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -11,6 +10,7 @@ import org.apache.commons.lang3.builder.HashCodeBuilder; import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.EMPTY_TARGET_COMMENT_PATH; +import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.INVALID_TARGET_COMMENT_PATH; import static kr.modusplant.shared.constant.Regex.PATTERN_MATERIALIZED_PATH; @Getter @@ -22,7 +22,7 @@ public static TargetCommentPath create(String value) { if (StringUtils.isBlank(value)) { throw new EmptyValueException(EMPTY_TARGET_COMMENT_PATH, "targetCommentPath"); } else if (!PATTERN_MATERIALIZED_PATH.matcher(value).matches()) { - throw new InvalidDataException(ErrorCode.INVALID_INPUT, "targetCommentPath"); + throw new InvalidValueException(INVALID_TARGET_COMMENT_PATH, "targetCommentPath"); } return new TargetCommentPath(value); } diff --git a/src/main/java/kr/modusplant/domains/member/domain/vo/TargetPostId.java b/src/main/java/kr/modusplant/domains/member/domain/vo/TargetPostId.java index 9c29b5d3e..f23b37f81 100644 --- a/src/main/java/kr/modusplant/domains/member/domain/vo/TargetPostId.java +++ b/src/main/java/kr/modusplant/domains/member/domain/vo/TargetPostId.java @@ -1,8 +1,7 @@ package kr.modusplant.domains.member.domain.vo; import kr.modusplant.shared.exception.EmptyValueException; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -11,6 +10,7 @@ import org.apache.commons.lang3.builder.HashCodeBuilder; import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.EMPTY_TARGET_POST_ID; +import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.INVALID_TARGET_POST_ID; import static kr.modusplant.shared.constant.Regex.PATTERN_ULID; @Getter @@ -22,7 +22,7 @@ public static TargetPostId create(String value) { if (StringUtils.isBlank(value)) { throw new EmptyValueException(EMPTY_TARGET_POST_ID, "targetPostId"); } else if (!PATTERN_ULID.matcher(value).matches()) { - throw new InvalidDataException(ErrorCode.INVALID_INPUT, "targetPostId"); + throw new InvalidValueException(INVALID_TARGET_POST_ID, "targetPostId"); } return new TargetPostId(value); } diff --git a/src/main/java/kr/modusplant/domains/member/framework/in/web/cache/service/MemberCacheValidationService.java b/src/main/java/kr/modusplant/domains/member/framework/in/web/cache/service/MemberCacheValidationService.java index 8af313568..962f35e02 100644 --- a/src/main/java/kr/modusplant/domains/member/framework/in/web/cache/service/MemberCacheValidationService.java +++ b/src/main/java/kr/modusplant/domains/member/framework/in/web/cache/service/MemberCacheValidationService.java @@ -4,8 +4,9 @@ import jakarta.annotation.Nullable; import kr.modusplant.domains.member.framework.in.web.cache.record.MemberCacheValidationResult; import kr.modusplant.framework.jpa.entity.SiteMemberProfileEntity; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.SiteMemberProfileJpaRepository; -import kr.modusplant.shared.exception.EntityNotFoundException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.crypto.password.PasswordEncoder; @@ -16,7 +17,6 @@ import java.util.Optional; import java.util.UUID; -import static kr.modusplant.shared.exception.enums.ErrorCode.MEMBER_PROFILE_NOT_FOUND; import static kr.modusplant.shared.http.utils.ParseHttpHeaderUtils.parseIfModifiedSince; import static kr.modusplant.shared.http.utils.ParseHttpHeaderUtils.parseIfNoneMatch; @@ -39,7 +39,7 @@ public MemberCacheValidationResult getMemberCacheValidationResult( @Nonnull UUID id) { Optional optionalMemberProfile = memberProfileJpaRepository.findByUuid(id); if (optionalMemberProfile.isEmpty()) { - throw new EntityNotFoundException(MEMBER_PROFILE_NOT_FOUND, "memberProfile"); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER_PROFILE, "memberProfile"); } SiteMemberProfileEntity memberProfileEntity = optionalMemberProfile.orElseThrow(); String entityTagSource = memberProfileEntity.getETagSource(); diff --git a/src/main/java/kr/modusplant/domains/post/domain/exception/enums/PostErrorCode.java b/src/main/java/kr/modusplant/domains/post/domain/exception/enums/PostErrorCode.java index 9054cad8b..ac08f1778 100644 --- a/src/main/java/kr/modusplant/domains/post/domain/exception/enums/PostErrorCode.java +++ b/src/main/java/kr/modusplant/domains/post/domain/exception/enums/PostErrorCode.java @@ -25,7 +25,10 @@ public enum PostErrorCode implements ErrorCode { AUTHOR_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "author_not_found", "작성자를 찾을 수 없습니다."), CONTENT_PROCESSING_FAILED(HttpStatus.INTERNAL_SERVER_ERROR.value(),"content_processing_failed","콘텐츠를 처리하는 중 오류가 발생했습니다."), EMPTY_CATEGORY_NAME(HttpStatus.BAD_REQUEST.value(),"empty_category_name","카테고리 이름이 비어 있습니다. "), - INVALID_CATEGORY_ORDER(HttpStatus.BAD_REQUEST.value(),"invalid_category_order","카테고리 순서가 유효하지 않습니다. "); + INVALID_CATEGORY_ORDER(HttpStatus.BAD_REQUEST.value(),"invalid_category_order","카테고리 순서가 유효하지 않습니다. "), + INVALID_FILE_INPUT(HttpStatus.BAD_REQUEST.value(),"invalid_file_input","파일 입력이 올바르지 않습니다"), + UNSUPPORTED_FILE(HttpStatus.FORBIDDEN.value(), "unsupported_file", "지원되지 않는 파일 타입입니다"), + FILE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST.value(),"file_limit_exceeded","파일 개수 또는 크기 제한을 초과했습니다"); private final int httpStatus; private final String code; diff --git a/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/FileLimitExceededException.java b/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/FileLimitExceededException.java index 37fe56343..98cb4d7fc 100644 --- a/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/FileLimitExceededException.java +++ b/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/FileLimitExceededException.java @@ -1,10 +1,10 @@ package kr.modusplant.domains.post.framework.out.processor.exception; +import kr.modusplant.domains.post.domain.exception.enums.PostErrorCode; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; public class FileLimitExceededException extends BusinessException { public FileLimitExceededException() { - super(ErrorCode.FILE_LIMIT_EXCEEDED); + super(PostErrorCode.FILE_LIMIT_EXCEEDED); } } diff --git a/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/InvalidFileInputException.java b/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/InvalidFileInputException.java index 062937948..bda26bcd3 100644 --- a/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/InvalidFileInputException.java +++ b/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/InvalidFileInputException.java @@ -1,10 +1,10 @@ package kr.modusplant.domains.post.framework.out.processor.exception; +import kr.modusplant.domains.post.domain.exception.enums.PostErrorCode; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; public class InvalidFileInputException extends BusinessException { public InvalidFileInputException() { - super(ErrorCode.INVALID_FILE_INPUT); + super(PostErrorCode.INVALID_FILE_INPUT); } } diff --git a/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/UnsupportedFileException.java b/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/UnsupportedFileException.java index 36a0913ce..bb27d1e66 100644 --- a/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/UnsupportedFileException.java +++ b/src/main/java/kr/modusplant/domains/post/framework/out/processor/exception/UnsupportedFileException.java @@ -1,8 +1,8 @@ package kr.modusplant.domains.post.framework.out.processor.exception; +import kr.modusplant.domains.post.domain.exception.enums.PostErrorCode; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; public class UnsupportedFileException extends BusinessException { - public UnsupportedFileException() { super(ErrorCode.UNSUPPORTED_FILE); } + public UnsupportedFileException() { super(PostErrorCode.UNSUPPORTED_FILE); } } diff --git a/src/main/java/kr/modusplant/domains/post/framework/out/redis/PostViewCountRedisRepository.java b/src/main/java/kr/modusplant/domains/post/framework/out/redis/PostViewCountRedisRepository.java index ed1689f45..d8049b7c6 100644 --- a/src/main/java/kr/modusplant/domains/post/framework/out/redis/PostViewCountRedisRepository.java +++ b/src/main/java/kr/modusplant/domains/post/framework/out/redis/PostViewCountRedisRepository.java @@ -2,7 +2,8 @@ import kr.modusplant.domains.post.domain.vo.PostId; import kr.modusplant.domains.post.usecase.port.repository.PostViewCountRepository; -import kr.modusplant.shared.exception.InvalidFormatException; +import kr.modusplant.shared.exception.InvalidValueException; +import kr.modusplant.shared.exception.enums.GeneralErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Repository; @@ -53,6 +54,6 @@ private String extractUlidFromKey(String key) { if (parts.length == 4) { return parts[2]; } - throw new InvalidFormatException("redisKey"); + throw new InvalidValueException(GeneralErrorCode.MALFORMED_INPUT, "redisKey"); } } diff --git a/src/main/java/kr/modusplant/framework/jpa/exception/ExistedEntityException.java b/src/main/java/kr/modusplant/framework/jpa/exception/ExistsEntityException.java similarity index 52% rename from src/main/java/kr/modusplant/framework/jpa/exception/ExistedEntityException.java rename to src/main/java/kr/modusplant/framework/jpa/exception/ExistsEntityException.java index 3da96e303..10e484f0c 100644 --- a/src/main/java/kr/modusplant/framework/jpa/exception/ExistedEntityException.java +++ b/src/main/java/kr/modusplant/framework/jpa/exception/ExistsEntityException.java @@ -1,29 +1,28 @@ package kr.modusplant.framework.jpa.exception; -import kr.modusplant.framework.jpa.exception.enums.EntityName; import kr.modusplant.shared.exception.BusinessException; import kr.modusplant.shared.exception.supers.ErrorCode; -public class ExistedEntityException extends BusinessException { +public class ExistsEntityException extends BusinessException { - private final EntityName entityName; + private final String entityName; - public ExistedEntityException(ErrorCode errorCode, EntityName entityName) { + public ExistsEntityException(ErrorCode errorCode, String entityName) { super(errorCode); this.entityName = entityName; } - public ExistedEntityException(ErrorCode errorCode, EntityName entityName, String message) { + public ExistsEntityException(ErrorCode errorCode, String entityName, String message) { super(errorCode, message); this.entityName = entityName; } - public ExistedEntityException(ErrorCode errorCode, EntityName entityName, String message, Throwable cause) { + public ExistsEntityException(ErrorCode errorCode, String entityName, String message, Throwable cause) { super(errorCode, message, cause); this.entityName = entityName; } - public ExistedEntityException(ErrorCode errorCode, EntityName entityName, Throwable cause) { + public ExistsEntityException(ErrorCode errorCode, String entityName, Throwable cause) { super(errorCode, cause); this.entityName = entityName; } diff --git a/src/main/java/kr/modusplant/framework/jpa/exception/NotFoundEntityException.java b/src/main/java/kr/modusplant/framework/jpa/exception/NotFoundEntityException.java index 97d75b30f..ef1d2d59f 100644 --- a/src/main/java/kr/modusplant/framework/jpa/exception/NotFoundEntityException.java +++ b/src/main/java/kr/modusplant/framework/jpa/exception/NotFoundEntityException.java @@ -1,29 +1,30 @@ package kr.modusplant.framework.jpa.exception; -import kr.modusplant.framework.jpa.exception.enums.EntityName; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.supers.ErrorCode; +import lombok.Getter; +@Getter public class NotFoundEntityException extends BusinessException { - private final EntityName entityName; + private final String entityName; - public NotFoundEntityException(ErrorCode errorCode, EntityName entityName) { + public NotFoundEntityException(ErrorCode errorCode, String entityName) { super(errorCode); this.entityName = entityName; } - public NotFoundEntityException(ErrorCode errorCode, EntityName entityName, Throwable cause) { + public NotFoundEntityException(ErrorCode errorCode, String entityName, Throwable cause) { super(errorCode, cause); this.entityName = entityName; } - public NotFoundEntityException(ErrorCode errorCode, EntityName entityName, String message) { + public NotFoundEntityException(ErrorCode errorCode, String entityName, String message) { super(errorCode, message); this.entityName = entityName; } - public NotFoundEntityException(ErrorCode errorCode, EntityName entityName, String message, Throwable cause) { + public NotFoundEntityException(ErrorCode errorCode, String entityName, String message, Throwable cause) { super(errorCode, message, cause); this.entityName = entityName; } diff --git a/src/main/java/kr/modusplant/framework/jpa/exception/enums/EntityName.java b/src/main/java/kr/modusplant/framework/jpa/exception/enums/EntityName.java deleted file mode 100644 index 57cac9654..000000000 --- a/src/main/java/kr/modusplant/framework/jpa/exception/enums/EntityName.java +++ /dev/null @@ -1,27 +0,0 @@ -package kr.modusplant.framework.jpa.exception.enums; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public enum EntityName { - - COMM_COMMENT_ENTITY("commCommentEntity"), - COMM_COMMENT_LIKE_ENTITY("commCommentLikeEntity"), - COMM_POST_ARCHIVE_ENTITY("commPostArchiveEntity"), - COMM_POST_BOOKMARK_ENTITY("commPostBookmarkEntity"), - COMM_POST_ENTITY("commPostEntity"), - COMM_POST_LIKE_ENTITY("commPostLikeEntity"), - COMM_PRIMARY_CATEGORY_ENTITY("commPrimaryCategoryEntity"), - COMM_SECONDARY_CATEGORY_ENTITY("commSecondaryCategoryEntity"), - SITE_MEMBER_AUTH_ENTITY("siteMemberAuthEntity"), - SITE_MEMBER_ENTITY("siteMemberEntity"), - SITE_MEMBER_PROFILE_ENTITY("siteMemberProfileEntity"), - SITE_MEMBER_ROLE_ENTITY("siteMemberRoleEntity"), - SITE_MEMBER_TERM_ENTITY("siteMemberTermEntity"), - TERM_ENTITY("termEntity"), - ; - - private final String name; -} diff --git a/src/main/java/kr/modusplant/infrastructure/jwt/exception/AuthTokenException.java b/src/main/java/kr/modusplant/infrastructure/jwt/exception/AuthTokenException.java index d0cb552b8..156abf8ed 100644 --- a/src/main/java/kr/modusplant/infrastructure/jwt/exception/AuthTokenException.java +++ b/src/main/java/kr/modusplant/infrastructure/jwt/exception/AuthTokenException.java @@ -1,7 +1,7 @@ package kr.modusplant.infrastructure.jwt.exception; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.supers.ErrorCode; import lombok.Getter; @Getter diff --git a/src/main/java/kr/modusplant/infrastructure/jwt/exception/InvalidTokenException.java b/src/main/java/kr/modusplant/infrastructure/jwt/exception/InvalidTokenException.java index 72ec3cd59..a1be34053 100644 --- a/src/main/java/kr/modusplant/infrastructure/jwt/exception/InvalidTokenException.java +++ b/src/main/java/kr/modusplant/infrastructure/jwt/exception/InvalidTokenException.java @@ -1,9 +1,9 @@ package kr.modusplant.infrastructure.jwt.exception; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.infrastructure.jwt.exception.enums.AuthTokenErrorCode; public class InvalidTokenException extends AuthTokenException { public InvalidTokenException() { - super(ErrorCode.CREDENTIAL_NOT_AUTHORIZED); + super(AuthTokenErrorCode.CREDENTIAL_NOT_AUTHORIZED); } } diff --git a/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenExpiredException.java b/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenExpiredException.java index d3112cb1f..5bdd95ac6 100644 --- a/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenExpiredException.java +++ b/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenExpiredException.java @@ -1,9 +1,9 @@ package kr.modusplant.infrastructure.jwt.exception; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.infrastructure.jwt.exception.enums.AuthTokenErrorCode; public class TokenExpiredException extends AuthTokenException { public TokenExpiredException() { - super(ErrorCode.CREDENTIAL_NOT_AUTHORIZED); + super(AuthTokenErrorCode.CREDENTIAL_NOT_AUTHORIZED); } } diff --git a/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenKeyCreationException.java b/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenKeyCreationException.java index 5c9c85396..bcae67678 100644 --- a/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenKeyCreationException.java +++ b/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenKeyCreationException.java @@ -1,9 +1,9 @@ package kr.modusplant.infrastructure.jwt.exception; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.infrastructure.jwt.exception.enums.AuthTokenErrorCode; public class TokenKeyCreationException extends AuthTokenException { public TokenKeyCreationException() { - super(ErrorCode.INTERNAL_AUTHENTICATION_FAIL); + super(AuthTokenErrorCode.INTERNAL_AUTHENTICATION_FAIL); } } diff --git a/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenKeyStorageException.java b/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenKeyStorageException.java index 14b5a16d8..0e0401d27 100644 --- a/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenKeyStorageException.java +++ b/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenKeyStorageException.java @@ -1,9 +1,9 @@ package kr.modusplant.infrastructure.jwt.exception; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.infrastructure.jwt.exception.enums.AuthTokenErrorCode; public class TokenKeyStorageException extends AuthTokenException { public TokenKeyStorageException() { - super(ErrorCode.INTERNAL_AUTHENTICATION_FAIL); + super(AuthTokenErrorCode.INTERNAL_AUTHENTICATION_FAIL); } } diff --git a/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenNotFoundException.java b/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenNotFoundException.java index 2f0252b8d..16c40e274 100644 --- a/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenNotFoundException.java +++ b/src/main/java/kr/modusplant/infrastructure/jwt/exception/TokenNotFoundException.java @@ -1,10 +1,10 @@ package kr.modusplant.infrastructure.jwt.exception; +import kr.modusplant.infrastructure.jwt.exception.enums.AuthTokenErrorCode; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; public class TokenNotFoundException extends BusinessException { public TokenNotFoundException() { - super(ErrorCode.CREDENTIAL_NOT_AUTHORIZED); + super(AuthTokenErrorCode.CREDENTIAL_NOT_AUTHORIZED); } } diff --git a/src/main/java/kr/modusplant/infrastructure/jwt/exception/enums/AuthTokenErrorCode.java b/src/main/java/kr/modusplant/infrastructure/jwt/exception/enums/AuthTokenErrorCode.java new file mode 100644 index 000000000..ed8cbf76f --- /dev/null +++ b/src/main/java/kr/modusplant/infrastructure/jwt/exception/enums/AuthTokenErrorCode.java @@ -0,0 +1,18 @@ +package kr.modusplant.infrastructure.jwt.exception.enums; + +import kr.modusplant.shared.exception.supers.ErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum AuthTokenErrorCode implements ErrorCode { + + CREDENTIAL_NOT_AUTHORIZED(HttpStatus.UNAUTHORIZED.value(), "credential_not_authorized", "인증에 필요한 데이터가 없거나 유효하지 않습니다"), + INTERNAL_AUTHENTICATION_FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "internal_authentication_fail", "서버의 문제로 인증을 처리하지 못했습니다"); + + private final int httpStatus; + private final String code; + private final String message; +} diff --git a/src/main/java/kr/modusplant/infrastructure/jwt/service/TokenService.java b/src/main/java/kr/modusplant/infrastructure/jwt/service/TokenService.java index 2332bc8ba..e443d0911 100644 --- a/src/main/java/kr/modusplant/infrastructure/jwt/service/TokenService.java +++ b/src/main/java/kr/modusplant/infrastructure/jwt/service/TokenService.java @@ -2,6 +2,8 @@ import kr.modusplant.framework.jpa.entity.SiteMemberEntity; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.SiteMemberAuthJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberRoleJpaRepository; @@ -13,8 +15,6 @@ import kr.modusplant.infrastructure.jwt.framework.out.redis.AccessTokenRedisRepository; import kr.modusplant.infrastructure.jwt.provider.JwtTokenProvider; import kr.modusplant.infrastructure.security.enums.Role; -import kr.modusplant.shared.exception.EntityNotFoundException; -import kr.modusplant.shared.exception.enums.ErrorCode; import kr.modusplant.shared.persistence.constant.TableName; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -51,7 +51,7 @@ public class TokenService { public TokenPair issueToken(UUID memberUuid, String nickname, String email, Role role) { // memberUuid 검증 if (memberUuid == null || !siteMemberJpaRepository.existsByUuid(memberUuid)) { - throw new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND, TableName.SITE_MEMBER); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER, TableName.SITE_MEMBER); } // accessToken , refresh token 생성 @@ -80,7 +80,7 @@ public void removeToken(String refreshToken) { // refresh token 조회 UUID memberUuid = jwtTokenProvider.getMemberUuidFromToken(refreshToken); - SiteMemberEntity memberEntity = siteMemberJpaRepository.findByUuid(memberUuid).orElseThrow(() -> new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND, TableName.SITE_MEMBER)); + SiteMemberEntity memberEntity = siteMemberJpaRepository.findByUuid(memberUuid).orElseThrow(() -> new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER, TableName.SITE_MEMBER)); RefreshTokenEntity refreshTokenEntity = refreshTokenJpaRepository.findByMemberAndRefreshToken(memberEntity,refreshToken).orElseThrow(TokenNotFoundException::new); // 토큰 삭제 diff --git a/src/main/java/kr/modusplant/infrastructure/security/handler/ForwardRequestLoginSuccessHandler.java b/src/main/java/kr/modusplant/infrastructure/security/handler/ForwardRequestLoginSuccessHandler.java index ca1d3ddaa..ef0ee8f57 100644 --- a/src/main/java/kr/modusplant/infrastructure/security/handler/ForwardRequestLoginSuccessHandler.java +++ b/src/main/java/kr/modusplant/infrastructure/security/handler/ForwardRequestLoginSuccessHandler.java @@ -4,12 +4,13 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import kr.modusplant.framework.jpa.entity.SiteMemberEntity; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.SiteMemberJpaRepository; import kr.modusplant.infrastructure.jwt.dto.TokenPair; import kr.modusplant.infrastructure.jwt.service.TokenService; import kr.modusplant.infrastructure.security.enums.Role; import kr.modusplant.infrastructure.security.models.DefaultUserDetails; -import kr.modusplant.shared.exception.EntityNotFoundException; import kr.modusplant.shared.persistence.constant.TableName; import lombok.RequiredArgsConstructor; import org.springframework.security.core.Authentication; @@ -20,8 +21,6 @@ import java.time.LocalDateTime; import java.util.UUID; -import static kr.modusplant.shared.exception.enums.ErrorCode.MEMBER_NOT_FOUND; - @RequiredArgsConstructor public class ForwardRequestLoginSuccessHandler implements AuthenticationSuccessHandler { @@ -62,7 +61,7 @@ private void updateMemberLoggedInAt(UUID currentMemberUuid) { return; } if (!memberRepository.existsByUuid(currentMemberUuid)) { - throw new EntityNotFoundException(MEMBER_NOT_FOUND, TableName.SITE_MEMBER); + throw new NotFoundEntityException(EntityErrorCode.NOT_FOUND_MEMBER, TableName.SITE_MEMBER); } SiteMemberEntity memberEntity = memberRepository.findByUuid(currentMemberUuid).orElseThrow(); memberEntity.updateLoggedInAt(LocalDateTime.now()); diff --git a/src/main/java/kr/modusplant/shared/event/CommentLikeEvent.java b/src/main/java/kr/modusplant/shared/event/CommentLikeEvent.java index e834412c1..9693ae74b 100644 --- a/src/main/java/kr/modusplant/shared/event/CommentLikeEvent.java +++ b/src/main/java/kr/modusplant/shared/event/CommentLikeEvent.java @@ -1,7 +1,7 @@ package kr.modusplant.shared.event; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -17,11 +17,11 @@ public class CommentLikeEvent { public static CommentLikeEvent create(UUID memberId, String postId, String path) { if (memberId == null) { - throw new InvalidDataException(ErrorCode.MEMBER_NOT_FOUND, "memberId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_MEMBER, "memberId"); } else if (postId.isEmpty()) { - throw new InvalidDataException(ErrorCode.POST_NOT_FOUND, "postId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_POST, "postId"); } else if (path.isEmpty()) { - throw new InvalidDataException(ErrorCode.COMMENT_NOT_FOUND, "path"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_COMMENT, "path"); } else { return new CommentLikeEvent(memberId, postId, path); } diff --git a/src/main/java/kr/modusplant/shared/event/CommentUnlikeEvent.java b/src/main/java/kr/modusplant/shared/event/CommentUnlikeEvent.java index c2010383e..ada0ef5a6 100644 --- a/src/main/java/kr/modusplant/shared/event/CommentUnlikeEvent.java +++ b/src/main/java/kr/modusplant/shared/event/CommentUnlikeEvent.java @@ -1,7 +1,7 @@ package kr.modusplant.shared.event; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -17,11 +17,11 @@ public class CommentUnlikeEvent { public static CommentUnlikeEvent create(UUID memberId, String postId, String path) { if (memberId == null) { - throw new InvalidDataException(ErrorCode.MEMBER_NOT_FOUND, "memberId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_MEMBER, "memberId"); } else if (postId.isEmpty()) { - throw new InvalidDataException(ErrorCode.POST_NOT_FOUND, "postId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_POST, "postId"); } else if (path.isEmpty()) { - throw new InvalidDataException(ErrorCode.COMMENT_NOT_FOUND, "path"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_COMMENT, "path"); } else { return new CommentUnlikeEvent(memberId, postId, path); } diff --git a/src/main/java/kr/modusplant/shared/event/PostBookmarkCancelEvent.java b/src/main/java/kr/modusplant/shared/event/PostBookmarkCancelEvent.java index d94ddcbe5..15e8b494c 100644 --- a/src/main/java/kr/modusplant/shared/event/PostBookmarkCancelEvent.java +++ b/src/main/java/kr/modusplant/shared/event/PostBookmarkCancelEvent.java @@ -1,7 +1,7 @@ package kr.modusplant.shared.event; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -16,9 +16,9 @@ public class PostBookmarkCancelEvent { public static PostBookmarkCancelEvent create(UUID memberId, String postId) { if (memberId == null) { - throw new InvalidDataException(ErrorCode.MEMBER_NOT_FOUND, "memberId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_MEMBER, "memberId"); } else if (postId.isEmpty()) { - throw new InvalidDataException(ErrorCode.POST_NOT_FOUND, "postId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_POST, "postId"); } else { return new PostBookmarkCancelEvent(memberId, postId); } diff --git a/src/main/java/kr/modusplant/shared/event/PostBookmarkEvent.java b/src/main/java/kr/modusplant/shared/event/PostBookmarkEvent.java index 0ffebcc92..8105f817e 100644 --- a/src/main/java/kr/modusplant/shared/event/PostBookmarkEvent.java +++ b/src/main/java/kr/modusplant/shared/event/PostBookmarkEvent.java @@ -1,7 +1,7 @@ package kr.modusplant.shared.event; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -16,9 +16,9 @@ public class PostBookmarkEvent { public static PostBookmarkEvent create(UUID memberId, String postId) { if (memberId == null) { - throw new InvalidDataException(ErrorCode.MEMBER_NOT_FOUND, "memberId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_MEMBER, "memberId"); } else if (postId.isEmpty()) { - throw new InvalidDataException(ErrorCode.POST_NOT_FOUND, "postId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_POST, "postId"); } else { return new PostBookmarkEvent(memberId, postId); } diff --git a/src/main/java/kr/modusplant/shared/event/PostLikeEvent.java b/src/main/java/kr/modusplant/shared/event/PostLikeEvent.java index c9dad213b..b7b93c2b9 100644 --- a/src/main/java/kr/modusplant/shared/event/PostLikeEvent.java +++ b/src/main/java/kr/modusplant/shared/event/PostLikeEvent.java @@ -1,7 +1,7 @@ package kr.modusplant.shared.event; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -16,9 +16,9 @@ public class PostLikeEvent { public static PostLikeEvent create(UUID memberId, String postId) { if (memberId == null) { - throw new InvalidDataException(ErrorCode.MEMBER_NOT_FOUND, "memberId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_MEMBER, "memberId"); } else if (postId.isEmpty()) { - throw new InvalidDataException(ErrorCode.POST_NOT_FOUND, "postId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_POST, "postId"); } else { return new PostLikeEvent(memberId, postId); } diff --git a/src/main/java/kr/modusplant/shared/event/PostUnlikeEvent.java b/src/main/java/kr/modusplant/shared/event/PostUnlikeEvent.java index 0bf2d690b..b8d698a4c 100644 --- a/src/main/java/kr/modusplant/shared/event/PostUnlikeEvent.java +++ b/src/main/java/kr/modusplant/shared/event/PostUnlikeEvent.java @@ -1,7 +1,7 @@ package kr.modusplant.shared.event; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -16,9 +16,9 @@ public class PostUnlikeEvent { public static PostUnlikeEvent create(UUID memberId, String postId) { if (memberId == null) { - throw new InvalidDataException(ErrorCode.MEMBER_NOT_FOUND, "memberId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_MEMBER, "memberId"); } else if (postId.isEmpty()) { - throw new InvalidDataException(ErrorCode.POST_NOT_FOUND, "postId"); + throw new InvalidValueException(EntityErrorCode.NOT_FOUND_POST, "postId"); } else { return new PostUnlikeEvent(memberId, postId); } diff --git a/src/main/java/kr/modusplant/shared/exception/BusinessException.java b/src/main/java/kr/modusplant/shared/exception/BusinessException.java index 8c0afa191..69d07dec4 100644 --- a/src/main/java/kr/modusplant/shared/exception/BusinessException.java +++ b/src/main/java/kr/modusplant/shared/exception/BusinessException.java @@ -8,7 +8,7 @@ /** * {@code BusinessException}은 모든 커스텀 예외의 상위 클래스입니다. * - *

커스텀 예외를 {@link kr.modusplant.shared.exception.enums.ErrorCode}와 대응시키는 역할을 합니다. + *

커스텀 예외를 {@link kr.modusplant.shared.exception.supers.ErrorCode}와 대응시키는 역할을 합니다. * 모든 커스텀 예외는 반드시 {@code BusinessException}을 상속받거나 * 해당 클래스의 서브 클래스를 상속받아야 합니다.

* diff --git a/src/main/java/kr/modusplant/shared/exception/DataLengthException.java b/src/main/java/kr/modusplant/shared/exception/DataLengthException.java deleted file mode 100644 index 0c20d1944..000000000 --- a/src/main/java/kr/modusplant/shared/exception/DataLengthException.java +++ /dev/null @@ -1,11 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.supers.ErrorCode; -import lombok.Getter; - -@Getter -public class DataLengthException extends BusinessException { - public DataLengthException(ErrorCode errorCode) { - super(errorCode); - } -} \ No newline at end of file diff --git a/src/main/java/kr/modusplant/shared/exception/EmptyEmailException.java b/src/main/java/kr/modusplant/shared/exception/EmptyEmailException.java deleted file mode 100644 index 2128d72e9..000000000 --- a/src/main/java/kr/modusplant/shared/exception/EmptyEmailException.java +++ /dev/null @@ -1,9 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.enums.ErrorCode; - -public class EmptyEmailException extends BusinessException { - public EmptyEmailException() { - super(ErrorCode.EMAIL_EMPTY); - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/EmptyNicknameException.java b/src/main/java/kr/modusplant/shared/exception/EmptyNicknameException.java deleted file mode 100644 index ea7ec1e14..000000000 --- a/src/main/java/kr/modusplant/shared/exception/EmptyNicknameException.java +++ /dev/null @@ -1,9 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.enums.ErrorCode; - -public class EmptyNicknameException extends BusinessException { - public EmptyNicknameException() { - super(ErrorCode.NICKNAME_EMPTY); - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/EmptyPasswordException.java b/src/main/java/kr/modusplant/shared/exception/EmptyPasswordException.java deleted file mode 100644 index 024788262..000000000 --- a/src/main/java/kr/modusplant/shared/exception/EmptyPasswordException.java +++ /dev/null @@ -1,9 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.enums.ErrorCode; - -public class EmptyPasswordException extends BusinessException { - public EmptyPasswordException() { - super(ErrorCode.PASSWORD_EMPTY); - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/EntityExistsException.java b/src/main/java/kr/modusplant/shared/exception/EntityExistsException.java deleted file mode 100644 index 7d880ef92..000000000 --- a/src/main/java/kr/modusplant/shared/exception/EntityExistsException.java +++ /dev/null @@ -1,15 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.supers.ErrorCode; -import lombok.Getter; - -@Getter -public class EntityExistsException extends BusinessException { - - private final String entityName; - - public EntityExistsException(ErrorCode errorCode, String entityName) { - super(errorCode); - this.entityName = entityName; - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/EntityNotFoundException.java b/src/main/java/kr/modusplant/shared/exception/EntityNotFoundException.java deleted file mode 100644 index 272e75011..000000000 --- a/src/main/java/kr/modusplant/shared/exception/EntityNotFoundException.java +++ /dev/null @@ -1,14 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.supers.ErrorCode; -import lombok.Getter; - -@Getter -public class EntityNotFoundException extends BusinessException{ - private final String entityName; - - public EntityNotFoundException(ErrorCode errorCode, String entityName) { - super(errorCode); - this.entityName = entityName; - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/ExistsValueException.java b/src/main/java/kr/modusplant/shared/exception/ExistsValueException.java new file mode 100644 index 000000000..136e7d491 --- /dev/null +++ b/src/main/java/kr/modusplant/shared/exception/ExistsValueException.java @@ -0,0 +1,39 @@ +package kr.modusplant.shared.exception; + +import kr.modusplant.shared.exception.supers.ErrorCode; + +/** + * 클라이언트가 조회하려는 데이터가 이미 존재하는 경우에 발생하는 예외입니다. + * 사용자가 변경하려는 닉네임이 존재하는 경우가 해당됩니다. + * 찾으려는 DB 컬럼 자체가 이미 있는 경우는 {@link kr.modusplant.framework.jpa.exception.ExistsEntityException}이 발생합니다. + */ +public class ExistsValueException extends BusinessException { + + private final String valueName; + + public ExistsValueException(ErrorCode errorCode, String valueName) { + super(errorCode); + this.valueName = valueName; + } + + public ExistsValueException(ErrorCode errorCode, String valueName, String message) { + super(errorCode, message); + this.valueName = valueName; + + } + + public ExistsValueException(ErrorCode errorCode, String valueName, String message, Throwable cause) { + super(errorCode, message, cause); + this.valueName = valueName; + } + + public ExistsValueException(ErrorCode errorCode, String valueName, Throwable cause) { + super(errorCode, cause); + this.valueName = valueName; + } + + @Override + public String getMessage() { + return String.format("%s [valueName: %s]", super.getMessage(), valueName); + } +} diff --git a/src/main/java/kr/modusplant/shared/exception/InvalidDataException.java b/src/main/java/kr/modusplant/shared/exception/InvalidDataException.java deleted file mode 100644 index 08969137d..000000000 --- a/src/main/java/kr/modusplant/shared/exception/InvalidDataException.java +++ /dev/null @@ -1,25 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.supers.ErrorCode; -import lombok.Getter; - -import java.util.List; - -@Getter -public class InvalidDataException extends BusinessException { - - private final String dataName; - private final List dataNames; - - public InvalidDataException(ErrorCode errorCode, String dataName) { - super(errorCode); - this.dataName = dataName; - this.dataNames = null; - } - - public InvalidDataException(ErrorCode errorCode, List dataNames) { - super(errorCode); - this.dataName = null; - this.dataNames = dataNames; - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/InvalidEmailException.java b/src/main/java/kr/modusplant/shared/exception/InvalidEmailException.java deleted file mode 100644 index 3ef45ed6a..000000000 --- a/src/main/java/kr/modusplant/shared/exception/InvalidEmailException.java +++ /dev/null @@ -1,9 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.enums.ErrorCode; - -public class InvalidEmailException extends BusinessException { - public InvalidEmailException() { - super(ErrorCode.INVALID_EMAIL); - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/InvalidFormatException.java b/src/main/java/kr/modusplant/shared/exception/InvalidFormatException.java deleted file mode 100644 index 7962f34be..000000000 --- a/src/main/java/kr/modusplant/shared/exception/InvalidFormatException.java +++ /dev/null @@ -1,15 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.enums.ErrorCode; -import lombok.Getter; - -@Getter -public class InvalidFormatException extends BusinessException { - - private final String invalidData; - - public InvalidFormatException(String invalidData) { - super(ErrorCode.GENERIC_ERROR); - this.invalidData = invalidData; - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/InvalidNicknameException.java b/src/main/java/kr/modusplant/shared/exception/InvalidNicknameException.java deleted file mode 100644 index 55c7e62a8..000000000 --- a/src/main/java/kr/modusplant/shared/exception/InvalidNicknameException.java +++ /dev/null @@ -1,9 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.enums.ErrorCode; - -public class InvalidNicknameException extends BusinessException { - public InvalidNicknameException() { - super(ErrorCode.INVALID_NICKNAME); - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/InvalidPasswordException.java b/src/main/java/kr/modusplant/shared/exception/InvalidPasswordException.java deleted file mode 100644 index c5db7e674..000000000 --- a/src/main/java/kr/modusplant/shared/exception/InvalidPasswordException.java +++ /dev/null @@ -1,9 +0,0 @@ -package kr.modusplant.shared.exception; - -import kr.modusplant.shared.exception.enums.ErrorCode; - -public class InvalidPasswordException extends BusinessException { - public InvalidPasswordException() { - super(ErrorCode.INVALID_PASSWORD); - } -} diff --git a/src/main/java/kr/modusplant/shared/exception/InvalidValueException.java b/src/main/java/kr/modusplant/shared/exception/InvalidValueException.java index 9cd5149eb..b77aa6946 100644 --- a/src/main/java/kr/modusplant/shared/exception/InvalidValueException.java +++ b/src/main/java/kr/modusplant/shared/exception/InvalidValueException.java @@ -1,11 +1,13 @@ package kr.modusplant.shared.exception; import kr.modusplant.shared.exception.supers.ErrorCode; +import lombok.Getter; /** * 클라이언트 요청 필드의 값이 해당 값의 형식과 맞지 않는 경우에 발생하는 예외입니다. * 이메일, 비밀번호, 닉네임 등의 값이 각자의 정규 표현식과 맞지 않는 경우가 해당됩니다. */ +@Getter public class InvalidValueException extends BusinessException { private final String valueName; @@ -18,7 +20,6 @@ public InvalidValueException(ErrorCode errorCode, String valueName) { public InvalidValueException(ErrorCode errorCode, String valueName, String message) { super(errorCode, message); this.valueName = valueName; - } public InvalidValueException(ErrorCode errorCode, String valueName, String message, Throwable cause) { diff --git a/src/main/java/kr/modusplant/shared/exception/enums/ErrorCode.java b/src/main/java/kr/modusplant/shared/exception/enums/ErrorCode.java deleted file mode 100644 index a67b2a698..000000000 --- a/src/main/java/kr/modusplant/shared/exception/enums/ErrorCode.java +++ /dev/null @@ -1,68 +0,0 @@ -package kr.modusplant.shared.exception.enums; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; - -@Getter -@RequiredArgsConstructor -public enum ErrorCode implements kr.modusplant.shared.exception.supers.ErrorCode { - - // -- common errors -- - GENERIC_ERROR(HttpStatus.INTERNAL_SERVER_ERROR.value(), "internal_server_error", "서버에 문제가 발생했습니다"), - - INPUT_TYPE_MISMATCH(HttpStatus.BAD_REQUEST.value(), "mismatch_input_type", "입력값의 서식이 올바르지 않습니다"), - INVALID_INPUT(HttpStatus.BAD_REQUEST.value(), "invalid_input", "입력값이 유효하지 않습니다"), - CONSTRAINT_VIOLATION(HttpStatus.BAD_REQUEST.value(), "constraint_violation", "데이터에 설정된 조건을 위배했습니다"), - MALFORMED_INPUT(HttpStatus.BAD_REQUEST.value(), "malformed_input", "입력값의 형식이 올바르지 않습니다"), - UNEXPECTED_INPUT(HttpStatus.BAD_REQUEST.value(), "unexpected_input", "서버가 알 수 없는 입력값이 발견되었습니다"), - - INVALID_STATE(HttpStatus.CONFLICT.value(), "invalid_state", "리소스의 상태가 유효하지 않습니다"), - - // -- business errors -- - // exists and not found - NICKNAME_EXISTS(HttpStatus.CONFLICT.value(), "nickname_exists", "닉네임이 이미 존재합니다"), - MEMBER_EXISTS(HttpStatus.CONFLICT.value(), "member_exists", "사용자의 계정이 이미 존재합니다"), - - MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "member_not_found", "사용자의 계정이 존재하지 않습니다"), - MEMBER_PROFILE_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "member_profile_not_found", "사용자의 프로필 정보가 존재하지 않습니다"), - MEMBER_ROLE_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "member_role_not_found", "사용자의 역할 정보가 존재하지 않습니다"), - COMMENT_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "comment_not_found", "댓글을 찾을 수 없습니다"), - POST_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "post_not_found", "게시글을 찾을 수 없습니다"), - - // empty or invalid value - CONTENT_TYPE_EMPTY(HttpStatus.BAD_REQUEST.value(), "content_type_empty", "컨텐츠 타입이 비었습니다"), - EMAIL_EMPTY(HttpStatus.BAD_REQUEST.value(), "empty_email","이메일이 비었습니다"), - FILE_NAME_EMPTY(HttpStatus.BAD_REQUEST.value(), "file_name_empty", "파일명이 비었습니다"), - NICKNAME_EMPTY(HttpStatus.BAD_REQUEST.value(), "nickname_empty", "닉네임이 비어 있습니다"), - PASSWORD_EMPTY(HttpStatus.BAD_REQUEST.value(), "password_empty", "비밀번호가 비어 있습니다"), - - FORBIDDEN_EMAIL(HttpStatus.FORBIDDEN.value(), "forbidden_email", "해당 이메일에 접근할 수 없습니다"), - INVALID_EMAIL_VERIFY_CODE(HttpStatus.FORBIDDEN.value(), "invalid_email_verify_code", "이메일의 검증 코드가 올바르지 않습니다"), - - INVALID_EMAIL(HttpStatus.BAD_REQUEST.value(), "invalid_email", "이메일이 올바르지 않습니다"), - INVALID_NICKNAME(HttpStatus.BAD_REQUEST.value(), "invalid_nickname", "닉네임이 올바르지 않습니다"), - INVALID_PAGE_RANGE(HttpStatus.BAD_REQUEST.value(), "invalid_page_range", "이용할 수 있는 페이지 범위가 아닙니다"), - INVALID_PASSWORD(HttpStatus.BAD_REQUEST.value(), "invalid_password", "비밀번호가 올바르지 않습니다"), - INVALID_FILE_INPUT(HttpStatus.BAD_REQUEST.value(),"invalid_file_input","파일 입력이 올바르지 않습니다"), - - // others - UNSUPPORTED_FILE(HttpStatus.FORBIDDEN.value(), "unsupported_file", "지원되지 않는 파일 타입입니다"), - UNSUPPORTED_SOCIAL_PROVIDER(HttpStatus.FORBIDDEN.value(), "unsupported_social_provider", "지원되지 않는 소셜 로그인 방식입니다"), - - FILE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST.value(),"file_limit_exceeded","파일 개수 또는 크기 제한을 초과했습니다"), - - SPECIFIED_SORTING_METHOD(HttpStatus.BAD_REQUEST.value(), "specified_sorting_method", "페이지 정렬 방식은 지정되지 않아야 합니다"), - - // -- auth errors -- - CREDENTIAL_NOT_AUTHORIZED(HttpStatus.UNAUTHORIZED.value(), "credential_not_authorized", "인증에 필요한 데이터가 없거나 유효하지 않습니다"), - INTERNAL_AUTHENTICATION_FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "internal_authentication_fail", "서버의 문제로 인증을 처리하지 못했습니다"), - PASSWORD_RESET_EMAIL_VERIFY_FAIL(HttpStatus.BAD_REQUEST.value(), "password_reset_email_verify_fail","유효하지 않거나 만료된 링크입니다"), - - GOOGLE_LOGIN_FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "google_login_fail", "구글 로그인 요청에 실패했습니다"), - KAKAO_LOGIN_FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "kakao_login_fail","카카오 로그인 요청에 실패했습니다"); - - private final int httpStatus; - private final String code; - private final String message; -} diff --git a/src/main/java/kr/modusplant/shared/kernel/Email.java b/src/main/java/kr/modusplant/shared/kernel/Email.java index f87849856..c253623d8 100644 --- a/src/main/java/kr/modusplant/shared/kernel/Email.java +++ b/src/main/java/kr/modusplant/shared/kernel/Email.java @@ -1,7 +1,8 @@ package kr.modusplant.shared.kernel; -import kr.modusplant.shared.exception.EmptyEmailException; -import kr.modusplant.shared.exception.InvalidEmailException; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -17,9 +18,9 @@ public class Email { public static Email create(String email) { if (email == null || email.isBlank()) { - throw new EmptyEmailException(); + throw new EmptyValueException(KernelErrorCode.EMPTY_EMAIL, "email"); } else if (!PATTERN_EMAIL.matcher(email).matches()) { - throw new InvalidEmailException(); + throw new InvalidValueException(KernelErrorCode.INVALID_EMAIL_FORMAT, "email"); } return new Email(email); } diff --git a/src/main/java/kr/modusplant/shared/kernel/Nickname.java b/src/main/java/kr/modusplant/shared/kernel/Nickname.java index f2f60cac8..22d095796 100644 --- a/src/main/java/kr/modusplant/shared/kernel/Nickname.java +++ b/src/main/java/kr/modusplant/shared/kernel/Nickname.java @@ -1,7 +1,8 @@ package kr.modusplant.shared.kernel; -import kr.modusplant.shared.exception.EmptyNicknameException; -import kr.modusplant.shared.exception.InvalidNicknameException; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -17,9 +18,9 @@ public class Nickname { public static Nickname create(String value) { if (value == null || value.isBlank()) { - throw new EmptyNicknameException(); + throw new EmptyValueException(KernelErrorCode.EMPTY_NICKNAME, "nickname"); } else if (!PATTERN_NICKNAME.matcher(value).matches()) { - throw new InvalidNicknameException(); + throw new InvalidValueException(KernelErrorCode.INVALID_NICKNAME_FORMAT, "nickname"); } return new Nickname(value); } diff --git a/src/main/java/kr/modusplant/shared/kernel/Password.java b/src/main/java/kr/modusplant/shared/kernel/Password.java index b2dd17c60..493f6c88a 100644 --- a/src/main/java/kr/modusplant/shared/kernel/Password.java +++ b/src/main/java/kr/modusplant/shared/kernel/Password.java @@ -1,7 +1,8 @@ package kr.modusplant.shared.kernel; -import kr.modusplant.shared.exception.EmptyPasswordException; -import kr.modusplant.shared.exception.InvalidPasswordException; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -17,9 +18,9 @@ public class Password { public static Password create(String password) { if (password == null || password.isBlank()) { - throw new EmptyPasswordException(); + throw new EmptyValueException(KernelErrorCode.EMPTY_PASSWORD, "password"); } else if (!PATTERN_PASSWORD.matcher(password).matches()) { - throw new InvalidPasswordException(); + throw new InvalidValueException(KernelErrorCode.INVALID_PASSWORD_FORMAT, "password"); } return new Password(password); } diff --git a/src/test/java/kr/modusplant/domains/account/normal/domain/vo/NormalCredentialsTest.java b/src/test/java/kr/modusplant/domains/account/normal/domain/vo/NormalCredentialsTest.java index 83c0b7723..b1f0e1e48 100644 --- a/src/test/java/kr/modusplant/domains/account/normal/domain/vo/NormalCredentialsTest.java +++ b/src/test/java/kr/modusplant/domains/account/normal/domain/vo/NormalCredentialsTest.java @@ -1,10 +1,9 @@ package kr.modusplant.domains.account.normal.domain.vo; import kr.modusplant.domains.account.normal.common.util.domain.vo.NormalCredentialsTestUtils; -import kr.modusplant.shared.exception.EmptyEmailException; -import kr.modusplant.shared.exception.InvalidEmailException; -import kr.modusplant.shared.exception.InvalidPasswordException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -14,35 +13,35 @@ public class NormalCredentialsTest implements NormalCredentialsTestUtils { @Test @DisplayName("null 값으로 자격 요소 생성") - public void testCreate_givenNullEmailAndPassword_willThrowEmptyEmailException() { + public void testCreate_givenNullEmailAndPassword_willThrowEmptyValueException() { // given - EmptyEmailException result = assertThrows(EmptyEmailException.class, () -> + EmptyValueException result = assertThrows(EmptyValueException.class, () -> NormalCredentials.createWithString(null, null)); // when & then - assertEquals(ErrorCode.EMAIL_EMPTY, result.getErrorCode()); + assertEquals(KernelErrorCode.EMPTY_EMAIL, result.getErrorCode()); } @Test @DisplayName("형식에 맞지 않는 이메일로 자격 요소 생성") - public void testCreate_givenInvalidEmail_willThrowInvalidEmailException() { + public void testCreate_givenInvalidEmail_willThrowInvalidValueException() { // given - InvalidEmailException result = assertThrows(InvalidEmailException.class, () -> + InvalidValueException result = assertThrows(InvalidValueException.class, () -> NormalCredentials.createWithString("email", testNormalCredentials.getPassword().getValue())); // when & then - assertEquals(ErrorCode.INVALID_EMAIL, result.getErrorCode()); + assertEquals(KernelErrorCode.INVALID_EMAIL_FORMAT, result.getErrorCode()); } @Test @DisplayName("형식에 맞지 않는 비밀번호로 자격 요소 생성") public void testCreate_givenInvalidPassword_willThrowInvalidValueException() { // given - InvalidPasswordException result = assertThrows(InvalidPasswordException.class, () -> + InvalidValueException result = assertThrows(InvalidValueException.class, () -> NormalCredentials.createWithString(testNormalCredentials.getEmail().getValue(), "282933")); // when & then - assertEquals(ErrorCode.INVALID_PASSWORD, result.getErrorCode()); + assertEquals(KernelErrorCode.INVALID_PASSWORD_FORMAT, result.getErrorCode()); } @Test diff --git a/src/test/java/kr/modusplant/domains/account/normal/domain/vo/SignUpDataTest.java b/src/test/java/kr/modusplant/domains/account/normal/domain/vo/SignUpDataTest.java index f571572e5..d8e97335a 100644 --- a/src/test/java/kr/modusplant/domains/account/normal/domain/vo/SignUpDataTest.java +++ b/src/test/java/kr/modusplant/domains/account/normal/domain/vo/SignUpDataTest.java @@ -2,12 +2,12 @@ import kr.modusplant.domains.account.normal.common.util.domain.vo.AgreedTermVersionTestUtils; import kr.modusplant.domains.account.normal.common.util.domain.vo.SignUpDataTestUtils; -import kr.modusplant.shared.exception.EmptyEmailException; -import kr.modusplant.shared.exception.InvalidEmailException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; import kr.modusplant.shared.kernel.common.util.EmailTestUtils; import kr.modusplant.shared.kernel.common.util.NicknameTestUtils; import kr.modusplant.shared.kernel.common.util.PasswordTestUtils; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -18,28 +18,28 @@ public class SignUpDataTest implements SignUpDataTestUtils, EmailTestUtils, Pass @Test @DisplayName("null 값으로 회원가입 정보 생성") - public void testCreate_givenNullEmail_willThrowEmptyEmailException() { + public void testCreate_givenNullEmail_willThrowEmptyValueException() { // given - EmptyEmailException result = assertThrows(EmptyEmailException.class, () -> + EmptyValueException result = assertThrows(EmptyValueException.class, () -> SignUpData.create(null, testNormalUserPassword.getValue(), testNormalUserNickname.getValue(), testAgreedTermsOfUse.getValue(), testAgreedPrivacyPolicy.getValue(), testAgreedAdReceiving.getValue())); // when & then - assertEquals(ErrorCode.EMAIL_EMPTY, result.getErrorCode()); + assertEquals(KernelErrorCode.EMPTY_EMAIL, result.getErrorCode()); } @Test @DisplayName("형식에 맞지 않는 값으로 회원가입 정보 생성") - public void testCreate_givenInvalidEmail_willThrowInvalidEmailException() { + public void testCreate_givenInvalidEmail_willThrowInvalidValueException() { // given - InvalidEmailException result = assertThrows(InvalidEmailException.class, () -> + InvalidValueException result = assertThrows(InvalidValueException.class, () -> SignUpData.create("testCredentials.getEmail()", testNormalUserPassword.getValue(), testNormalUserNickname.getValue(), testAgreedTermsOfUse.getValue(), testAgreedPrivacyPolicy.getValue(), testAgreedAdReceiving.getValue())); // when & then - assertEquals(ErrorCode.INVALID_EMAIL, result.getErrorCode()); + assertEquals(KernelErrorCode.INVALID_EMAIL_FORMAT, result.getErrorCode()); } @Test diff --git a/src/test/java/kr/modusplant/domains/account/social/framework/out/client/SocialAuthClientFactoryImplTest.java b/src/test/java/kr/modusplant/domains/account/social/framework/out/client/SocialAuthClientFactoryImplTest.java index 7086eb8f3..08f3782df 100644 --- a/src/test/java/kr/modusplant/domains/account/social/framework/out/client/SocialAuthClientFactoryImplTest.java +++ b/src/test/java/kr/modusplant/domains/account/social/framework/out/client/SocialAuthClientFactoryImplTest.java @@ -1,9 +1,9 @@ package kr.modusplant.domains.account.social.framework.out.client; +import kr.modusplant.domains.account.social.domain.exception.enums.SocialIdentityErrorCode; import kr.modusplant.domains.account.social.framework.out.exception.UnsupportedSocialProviderException; import kr.modusplant.domains.account.social.usecase.port.client.SocialAuthClient; import kr.modusplant.shared.enums.AuthProvider; -import kr.modusplant.shared.exception.enums.ErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -53,7 +53,7 @@ void testGetClient_givenGoogleProvider_willReturnGoogleAuthClient() { void testGetClient_givenBasicProvider_willThrowException() { // when & then UnsupportedSocialProviderException exception = assertThrows(UnsupportedSocialProviderException.class, () -> socialAuthClientFactory.getClient(AuthProvider.BASIC)); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.UNSUPPORTED_SOCIAL_PROVIDER); + assertThat(exception.getErrorCode()).isEqualTo(SocialIdentityErrorCode.UNSUPPORTED_SOCIAL_PROVIDER); } diff --git a/src/test/java/kr/modusplant/domains/account/social/framework/out/jpa/repository/SocialIdentityRepositoryJpaAdapterTest.java b/src/test/java/kr/modusplant/domains/account/social/framework/out/jpa/repository/SocialIdentityRepositoryJpaAdapterTest.java index e918d90c9..20958f5c1 100644 --- a/src/test/java/kr/modusplant/domains/account/social/framework/out/jpa/repository/SocialIdentityRepositoryJpaAdapterTest.java +++ b/src/test/java/kr/modusplant/domains/account/social/framework/out/jpa/repository/SocialIdentityRepositoryJpaAdapterTest.java @@ -9,12 +9,12 @@ import kr.modusplant.framework.jpa.entity.SiteMemberAuthEntity; import kr.modusplant.framework.jpa.entity.SiteMemberEntity; import kr.modusplant.framework.jpa.entity.SiteMemberRoleEntity; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.SiteMemberAuthJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberRoleJpaRepository; import kr.modusplant.infrastructure.security.enums.Role; -import kr.modusplant.shared.exception.EntityNotFoundException; -import kr.modusplant.shared.exception.enums.ErrorCode; import kr.modusplant.shared.kernel.common.util.EmailTestUtils; import kr.modusplant.shared.persistence.constant.TableName; import org.junit.jupiter.api.DisplayName; @@ -26,7 +26,7 @@ import static kr.modusplant.domains.account.shared.kernel.common.util.AccountIdTestUtils.testKakaoAccountId; import static kr.modusplant.domains.account.social.common.constant.SocialUuidConstant.TEST_SOCIAL_KAKAO_MEMBER_ID_UUID; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; @@ -114,8 +114,8 @@ void testGetUserPayloadByMemberId_givenNonExistentMemberId_willThrowException() given(memberJpaRepository.findByUuid(testKakaoAccountId.getValue())).willReturn(Optional.empty()); // when & then - EntityNotFoundException exception = assertThrows(EntityNotFoundException.class, () -> socialIdentityRepositoryJpaAdapter.getUserPayloadByMemberId(testKakaoAccountId)); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.MEMBER_NOT_FOUND); + NotFoundEntityException exception = assertThrows(NotFoundEntityException.class, () -> socialIdentityRepositoryJpaAdapter.getUserPayloadByMemberId(testKakaoAccountId)); + assertThat(exception.getErrorCode()).isEqualTo(EntityErrorCode.NOT_FOUND_MEMBER); assertThat(exception.getEntityName()).isEqualTo(TableName.SITE_MEMBER); verify(memberJpaRepository).findByUuid(testKakaoAccountId.getValue()); } @@ -132,8 +132,8 @@ void testGetUserPayloadByMemberId_givenMemberWithoutRole_willThrowException() { given(memberRoleJpaRepository.findByMember(memberEntity)).willReturn(Optional.empty()); // when & then - EntityNotFoundException exception = assertThrows(EntityNotFoundException.class, () -> socialIdentityRepositoryJpaAdapter.getUserPayloadByMemberId(testKakaoAccountId)); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.MEMBER_ROLE_NOT_FOUND); + NotFoundEntityException exception = assertThrows(NotFoundEntityException.class, () -> socialIdentityRepositoryJpaAdapter.getUserPayloadByMemberId(testKakaoAccountId)); + assertThat(exception.getErrorCode()).isEqualTo(EntityErrorCode.NOT_FOUND_MEMBER_ROLE); assertThat(exception.getEntityName()).isEqualTo(TableName.SITE_MEMBER_ROLE); verify(memberAuthJpaRepository).findByActiveMember(memberEntity); verify(memberRoleJpaRepository).findByMember(memberEntity); diff --git a/src/test/java/kr/modusplant/domains/member/adapter/controller/MemberControllerTest.java b/src/test/java/kr/modusplant/domains/member/adapter/controller/MemberControllerTest.java index 55ccb850b..ce60ac841 100644 --- a/src/test/java/kr/modusplant/domains/member/adapter/controller/MemberControllerTest.java +++ b/src/test/java/kr/modusplant/domains/member/adapter/controller/MemberControllerTest.java @@ -22,6 +22,9 @@ import kr.modusplant.framework.jpa.entity.*; import kr.modusplant.framework.jpa.entity.common.util.CommPostEntityTestUtils; import kr.modusplant.framework.jpa.entity.common.util.SiteMemberProfileEntityTestUtils; +import kr.modusplant.framework.jpa.exception.ExistsEntityException; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.*; import kr.modusplant.infrastructure.event.bus.EventBus; import kr.modusplant.infrastructure.event.consumer.CommentEventConsumer; @@ -30,9 +33,8 @@ import kr.modusplant.infrastructure.swear.exception.enums.SwearErrorCode; import kr.modusplant.infrastructure.swear.service.SwearService; import kr.modusplant.shared.event.common.util.PostLikeEventTestUtils; -import kr.modusplant.shared.exception.EntityExistsException; -import kr.modusplant.shared.exception.EntityNotFoundException; import kr.modusplant.shared.exception.NotAccessibleException; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -61,8 +63,6 @@ import static kr.modusplant.shared.event.common.util.CommentLikeEventTestUtils.testCommentLikeEvent; import static kr.modusplant.shared.event.common.util.PostBookmarkEventTestUtils.testPostBookmarkEvent; import static kr.modusplant.shared.event.common.util.PostCancelPostBookmarkEventTestUtils.testPostBookmarkCancelEvent; -import static kr.modusplant.shared.exception.enums.ErrorCode.MEMBER_PROFILE_NOT_FOUND; -import static kr.modusplant.shared.exception.enums.ErrorCode.NICKNAME_EXISTS; import static kr.modusplant.shared.kernel.common.util.NicknameTestUtils.testNormalUserNickname; import static kr.modusplant.shared.persistence.common.util.constant.SiteMemberConstant.MEMBER_BASIC_USER_NICKNAME; import static kr.modusplant.shared.persistence.common.util.constant.SiteMemberConstant.MEMBER_BASIC_USER_UUID; @@ -113,9 +113,9 @@ void testValidateBeforeRegister_givenAlreadyExistedNickname_willThrowException() given(memberRepository.isNicknameExist(any())).willReturn(true); // when & then - EntityExistsException alreadyExistedNicknameException = assertThrows( - EntityExistsException.class, () -> memberController.register(testMemberRegisterRequest)); - assertThat(alreadyExistedNicknameException.getErrorCode()).isEqualTo(NICKNAME_EXISTS); + ExistsEntityException alreadyExistedNicknameException = assertThrows( + ExistsEntityException.class, () -> memberController.register(testMemberRegisterRequest)); + assertThat(alreadyExistedNicknameException.getErrorCode()).isEqualTo(KernelErrorCode.EXISTS_NICKNAME); } @Test @@ -147,11 +147,11 @@ void testGetProfile_givenNotFoundMemberId_willThrowException() { given(memberRepository.getById(any())).willReturn(Optional.empty()); // when - EntityNotFoundException entityNotFoundException = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityException = assertThrows(NotFoundEntityException.class, () -> memberController.getProfile(testMemberProfileGetRecord)); // then - assertThat(entityNotFoundException.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); + assertThat(NotFoundEntityException.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); } @Test @@ -162,8 +162,8 @@ void testGetProfile_givenNotFoundMemberProfile_willThrowException() throws IOExc given(memberProfileRepository.getById(any())).willReturn(Optional.empty()); // when & then - EntityNotFoundException exception = assertThrows(EntityNotFoundException.class, () -> memberController.getProfile(testMemberProfileGetRecord)); - assertThat(exception.getErrorCode()).isEqualTo(MEMBER_PROFILE_NOT_FOUND); + NotFoundEntityException exception = assertThrows(NotFoundEntityException.class, () -> memberController.getProfile(testMemberProfileGetRecord)); + assertThat(exception.getErrorCode()).isEqualTo(EntityErrorCode.NOT_FOUND_MEMBER_PROFILE); } @Test @@ -249,8 +249,8 @@ void testValidateMemberIdAndNicknameBeforeOverrideProfile_givenNotFoundId_willTh given(memberRepository.isIdExist(any())).willReturn(false); // when & then - EntityNotFoundException alreadyExistedNicknameException = assertThrows( - EntityNotFoundException.class, () -> memberController.overrideProfile(testMemberProfileOverrideRecord)); + NotFoundEntityException alreadyExistedNicknameException = assertThrows( + NotFoundEntityException.class, () -> memberController.overrideProfile(testMemberProfileOverrideRecord)); assertThat(alreadyExistedNicknameException.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); } @@ -275,9 +275,9 @@ void testValidate_willThrowException() { given(memberRepository.getByNickname(any())).willReturn(Optional.of(Member.create(MemberId.generate(), testMemberActiveStatus, testNormalUserNickname, testMemberBirthDate))); // when & then - EntityExistsException alreadyExistedNicknameException = assertThrows( - EntityExistsException.class, () -> memberController.overrideProfile(testMemberProfileOverrideRecord)); - assertThat(alreadyExistedNicknameException.getErrorCode()).isEqualTo(NICKNAME_EXISTS); + ExistsEntityException alreadyExistedNicknameException = assertThrows( + ExistsEntityException.class, () -> memberController.overrideProfile(testMemberProfileOverrideRecord)); + assertThat(alreadyExistedNicknameException.getErrorCode()).isEqualTo(KernelErrorCode.EXISTS_NICKNAME); } @Test @@ -289,11 +289,11 @@ void testOverrideProfile_givenNotFoundMemberProfile_willThrowException() throws given(memberProfileRepository.getById(any())).willReturn(Optional.empty()); // when - EntityNotFoundException exception = assertThrows(EntityNotFoundException.class, () -> memberController.overrideProfile( + NotFoundEntityException exception = assertThrows(NotFoundEntityException.class, () -> memberController.overrideProfile( new MemberProfileOverrideRecord(MEMBER_BASIC_USER_UUID, null, null, MEMBER_BASIC_USER_NICKNAME))); // then - assertThat(exception.getErrorCode()).isEqualTo(MEMBER_PROFILE_NOT_FOUND); + assertThat(exception.getErrorCode()).isEqualTo(EntityErrorCode.NOT_FOUND_MEMBER_PROFILE); } @Test @@ -457,14 +457,14 @@ void testValidateBeforeLikeOrUnlikePost_givenNotFoundMemberId_willThrowException given(memberRepository.isIdExist(any())).willReturn(false); // when - EntityNotFoundException entityNotFoundExceptionForLike = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForLike = assertThrows(NotFoundEntityException.class, () -> memberController.likePost(testMemberPostLikeRecord)); - EntityNotFoundException entityNotFoundExceptionForUnlike = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForUnlike = assertThrows(NotFoundEntityException.class, () -> memberController.unlikePost(testMemberPostUnlikeRecord)); // then - assertThat(entityNotFoundExceptionForLike.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); - assertThat(entityNotFoundExceptionForUnlike.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); + assertThat(NotFoundEntityExceptionForLike.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); + assertThat(NotFoundEntityExceptionForUnlike.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); } @Test @@ -475,14 +475,14 @@ void testValidateBeforeLikeOrUnlikePost_givenNotFoundTargetPostId_willThrowExcep given(targetPostIdRepository.isIdExist(any())).willReturn(false); // when - EntityNotFoundException entityNotFoundExceptionForLike = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForLike = assertThrows(NotFoundEntityException.class, () -> memberController.likePost(testMemberPostLikeRecord)); - EntityNotFoundException entityNotFoundExceptionForUnlike = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForUnlike = assertThrows(NotFoundEntityException.class, () -> memberController.unlikePost(testMemberPostUnlikeRecord)); // then - assertThat(entityNotFoundExceptionForLike.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_POST_ID); - assertThat(entityNotFoundExceptionForUnlike.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_POST_ID); + assertThat(NotFoundEntityExceptionForLike.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_POST_ID); + assertThat(NotFoundEntityExceptionForUnlike.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_POST_ID); } @Test @@ -494,14 +494,14 @@ void testValidateBeforeLikeOrUnlikePost_givenNotPublishedTargetPost_willThrowExc given(targetPostIdRepository.isPublished(any())).willReturn(false); // when - NotAccessibleException entityNotFoundExceptionForLike = assertThrows(NotAccessibleException.class, + NotAccessibleException NotFoundEntityExceptionForLike = assertThrows(NotAccessibleException.class, () -> memberController.likePost(testMemberPostLikeRecord)); - NotAccessibleException entityNotFoundExceptionForUnlike = assertThrows(NotAccessibleException.class, + NotAccessibleException NotFoundEntityExceptionForUnlike = assertThrows(NotAccessibleException.class, () -> memberController.unlikePost(testMemberPostUnlikeRecord)); // then - assertThat(entityNotFoundExceptionForLike.getErrorCode()).isEqualTo(NOT_ACCESSIBLE_POST_LIKE); - assertThat(entityNotFoundExceptionForUnlike.getErrorCode()).isEqualTo(NOT_ACCESSIBLE_POST_LIKE); + assertThat(NotFoundEntityExceptionForLike.getErrorCode()).isEqualTo(NOT_ACCESSIBLE_POST_LIKE); + assertThat(NotFoundEntityExceptionForUnlike.getErrorCode()).isEqualTo(NOT_ACCESSIBLE_POST_LIKE); } @Test @@ -511,14 +511,14 @@ void testValidateBeforeBookmarkOrCancelBookmark_givenNotFoundMemberId_willThrowE given(memberRepository.isIdExist(any())).willReturn(false); // when - EntityNotFoundException entityNotFoundExceptionForBookmark = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForBookmark = assertThrows(NotFoundEntityException.class, () -> memberController.bookmarkPost(testMemberPostBookmarkRecord)); - EntityNotFoundException entityNotFoundExceptionForCancelBookmark = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForCancelBookmark = assertThrows(NotFoundEntityException.class, () -> memberController.cancelPostBookmark(testMemberPostBookmarkCancelRecord)); // then - assertThat(entityNotFoundExceptionForBookmark.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); - assertThat(entityNotFoundExceptionForCancelBookmark.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); + assertThat(NotFoundEntityExceptionForBookmark.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); + assertThat(NotFoundEntityExceptionForCancelBookmark.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); } @Test @@ -529,14 +529,14 @@ void testValidateBeforeBookmarkOrCancelBookmark_givenNotFoundTargetPostId_willTh given(targetPostIdRepository.isIdExist(any())).willReturn(false); // when - EntityNotFoundException entityNotFoundExceptionForBookmark = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForBookmark = assertThrows(NotFoundEntityException.class, () -> memberController.bookmarkPost(testMemberPostBookmarkRecord)); - EntityNotFoundException entityNotFoundExceptionForCancelBookmark = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForCancelBookmark = assertThrows(NotFoundEntityException.class, () -> memberController.cancelPostBookmark(testMemberPostBookmarkCancelRecord)); // then - assertThat(entityNotFoundExceptionForBookmark.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_POST_ID); - assertThat(entityNotFoundExceptionForCancelBookmark.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_POST_ID); + assertThat(NotFoundEntityExceptionForBookmark.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_POST_ID); + assertThat(NotFoundEntityExceptionForCancelBookmark.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_POST_ID); } @Test @@ -548,14 +548,14 @@ void testValidateBeforeBookmarkOrCancelBookmark_givenNotPublishedTargetPost_will given(targetPostIdRepository.isPublished(any())).willReturn(false); // when - NotAccessibleException entityNotFoundExceptionForBookmark = assertThrows(NotAccessibleException.class, + NotAccessibleException NotFoundEntityExceptionForBookmark = assertThrows(NotAccessibleException.class, () -> memberController.bookmarkPost(testMemberPostBookmarkRecord)); - NotAccessibleException entityNotFoundExceptionForCancelBookmark = assertThrows(NotAccessibleException.class, + NotAccessibleException NotFoundEntityExceptionForCancelBookmark = assertThrows(NotAccessibleException.class, () -> memberController.cancelPostBookmark(testMemberPostBookmarkCancelRecord)); // then - assertThat(entityNotFoundExceptionForBookmark.getErrorCode()).isEqualTo(NOT_ACCESSIBLE_POST_BOOKMARK); - assertThat(entityNotFoundExceptionForCancelBookmark.getErrorCode()).isEqualTo(NOT_ACCESSIBLE_POST_BOOKMARK); + assertThat(NotFoundEntityExceptionForBookmark.getErrorCode()).isEqualTo(NOT_ACCESSIBLE_POST_BOOKMARK); + assertThat(NotFoundEntityExceptionForCancelBookmark.getErrorCode()).isEqualTo(NOT_ACCESSIBLE_POST_BOOKMARK); } @Test @@ -645,14 +645,14 @@ void testValidateBeforeLikeOrUnlikeComment_givenNotFoundMemberId_willThrowExcept given(memberRepository.isIdExist(any())).willReturn(false); // when - EntityNotFoundException entityNotFoundExceptionForLike = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForLike = assertThrows(NotFoundEntityException.class, () -> memberController.likeComment(testMemberCommentLikeRecord)); - EntityNotFoundException entityNotFoundExceptionForUnlike = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForUnlike = assertThrows(NotFoundEntityException.class, () -> memberController.unlikeComment(testMemberCommentUnlikeRecord)); // then - assertThat(entityNotFoundExceptionForLike.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); - assertThat(entityNotFoundExceptionForUnlike.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); + assertThat(NotFoundEntityExceptionForLike.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); + assertThat(NotFoundEntityExceptionForUnlike.getErrorCode()).isEqualTo(NOT_FOUND_MEMBER_ID); } @Test @@ -663,13 +663,13 @@ void testValidateBeforeLikeOrUnlikeComment_givenNotFoundTargetPostId_willThrowEx given(targetCommentIdRepository.isIdExist(any())).willReturn(false); // when - EntityNotFoundException entityNotFoundExceptionForLike = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForLike = assertThrows(NotFoundEntityException.class, () -> memberController.likeComment(testMemberCommentLikeRecord)); - EntityNotFoundException entityNotFoundExceptionForUnlike = assertThrows(EntityNotFoundException.class, + NotFoundEntityException NotFoundEntityExceptionForUnlike = assertThrows(NotFoundEntityException.class, () -> memberController.unlikeComment(testMemberCommentUnlikeRecord)); // then - assertThat(entityNotFoundExceptionForLike.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_COMMENT_ID); - assertThat(entityNotFoundExceptionForUnlike.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_COMMENT_ID); + assertThat(NotFoundEntityExceptionForLike.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_COMMENT_ID); + assertThat(NotFoundEntityExceptionForUnlike.getErrorCode()).isEqualTo(NOT_FOUND_TARGET_COMMENT_ID); } } \ No newline at end of file diff --git a/src/test/java/kr/modusplant/domains/member/domain/aggregate/MemberProfileTest.java b/src/test/java/kr/modusplant/domains/member/domain/aggregate/MemberProfileTest.java index da97e23a6..2da8b77da 100644 --- a/src/test/java/kr/modusplant/domains/member/domain/aggregate/MemberProfileTest.java +++ b/src/test/java/kr/modusplant/domains/member/domain/aggregate/MemberProfileTest.java @@ -3,9 +3,8 @@ import kr.modusplant.domains.member.common.util.domain.aggregate.MemberProfileTestUtils; import kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode; import kr.modusplant.domains.member.domain.vo.MemberId; -import kr.modusplant.shared.exception.EmptyNicknameException; import kr.modusplant.shared.exception.EmptyValueException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -43,10 +42,10 @@ void testCreate_givenNullToOneOfFourParameters_willThrowException() { // Nickname이 null일 때 // given - EmptyNicknameException nicknameException = assertThrows(EmptyNicknameException.class, () -> MemberProfile.create(testMemberId, testMemberProfileImage, testMemberProfileIntroduction, null)); + EmptyValueException nicknameException = assertThrows(EmptyValueException.class, () -> MemberProfile.create(testMemberId, testMemberProfileImage, testMemberProfileIntroduction, null)); // when & then - assertThat(nicknameException.getErrorCode()).isEqualTo(ErrorCode.NICKNAME_EMPTY); + assertThat(nicknameException.getErrorCode()).isEqualTo(KernelErrorCode.EMPTY_NICKNAME); } @Test diff --git a/src/test/java/kr/modusplant/domains/member/domain/aggregate/MemberTest.java b/src/test/java/kr/modusplant/domains/member/domain/aggregate/MemberTest.java index 7831a1710..482475c0b 100644 --- a/src/test/java/kr/modusplant/domains/member/domain/aggregate/MemberTest.java +++ b/src/test/java/kr/modusplant/domains/member/domain/aggregate/MemberTest.java @@ -3,9 +3,8 @@ import kr.modusplant.domains.member.common.util.domain.aggregate.MemberTestUtils; import kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode; import kr.modusplant.domains.member.domain.vo.MemberId; -import kr.modusplant.shared.exception.EmptyNicknameException; import kr.modusplant.shared.exception.EmptyValueException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -36,10 +35,10 @@ void testCreate_givenNullToOneOfFourParameters_willThrowException() { // Nickname이 null일 때 // given - EmptyNicknameException nicknameException = assertThrows(EmptyNicknameException.class, () -> Member.create(testMemberId, testMemberActiveStatus, null, testMemberBirthDate)); + EmptyValueException nicknameException = assertThrows(EmptyValueException.class, () -> Member.create(testMemberId, testMemberActiveStatus, null, testMemberBirthDate)); // when & then - assertThat(nicknameException.getErrorCode()).isEqualTo(ErrorCode.NICKNAME_EMPTY); + assertThat(nicknameException.getErrorCode()).isEqualTo(KernelErrorCode.EMPTY_NICKNAME); // MemberBirthDate가 null일 때 // given diff --git a/src/test/java/kr/modusplant/domains/member/domain/vo/MemberIdTest.java b/src/test/java/kr/modusplant/domains/member/domain/vo/MemberIdTest.java index 07a6773e6..dc7298f2d 100644 --- a/src/test/java/kr/modusplant/domains/member/domain/vo/MemberIdTest.java +++ b/src/test/java/kr/modusplant/domains/member/domain/vo/MemberIdTest.java @@ -3,8 +3,7 @@ import kr.modusplant.domains.member.common.util.domain.aggregate.MemberTestUtils; import kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode; import kr.modusplant.shared.exception.EmptyValueException; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -12,6 +11,7 @@ import static kr.modusplant.domains.member.common.util.domain.vo.MemberBirthDateTestUtils.testMemberBirthDate; import static kr.modusplant.domains.member.common.util.domain.vo.MemberIdTestUtils.testMemberId; +import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.INVALID_MEMBER_ID; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; @@ -58,9 +58,9 @@ void testFromString_givenEmptyString_willThrowException() { @Test @DisplayName("정규 표현식에 매칭되지 않는 값으로 fromString을 호출하여 오류 발생") void testFromString_givenInvalidId_willThrowException() { - InvalidDataException exception = assertThrows(InvalidDataException.class, () -> MemberId.fromString("!유효하지않음!")); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.INVALID_INPUT); - assertThat(exception.getDataName()).isEqualTo("memberId"); + InvalidValueException exception = assertThrows(InvalidValueException.class, () -> MemberId.fromString("!유효하지않음!")); + assertThat(exception.getErrorCode()).isEqualTo(INVALID_MEMBER_ID); + assertThat(exception.getValueName()).isEqualTo("memberId"); } @Test diff --git a/src/test/java/kr/modusplant/domains/member/domain/vo/MemberProfileIntroductionTest.java b/src/test/java/kr/modusplant/domains/member/domain/vo/MemberProfileIntroductionTest.java index a3a34fe16..8ba697171 100644 --- a/src/test/java/kr/modusplant/domains/member/domain/vo/MemberProfileIntroductionTest.java +++ b/src/test/java/kr/modusplant/domains/member/domain/vo/MemberProfileIntroductionTest.java @@ -1,8 +1,8 @@ package kr.modusplant.domains.member.domain.vo; import kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode; -import kr.modusplant.shared.exception.DataLengthException; import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -38,7 +38,7 @@ void testCreate_givenEmptyString_willThrowException() { @Test @DisplayName("60자를 초과하는 문자열로 create을 호출하여 오류 발생") void testCreate_givenStringExceeding60Chars_willThrowException() { - DataLengthException exception = assertThrows(DataLengthException.class, () -> MemberProfileIntroduction.create("a".repeat(61))); + InvalidValueException exception = assertThrows(InvalidValueException.class, () -> MemberProfileIntroduction.create("a".repeat(61))); assertThat(exception.getErrorCode()).isEqualTo(MemberErrorCode.MEMBER_PROFILE_INTRODUCTION_OVER_LENGTH); } diff --git a/src/test/java/kr/modusplant/domains/member/domain/vo/TargetCommentPathTest.java b/src/test/java/kr/modusplant/domains/member/domain/vo/TargetCommentPathTest.java index 9b26403d1..728f19755 100644 --- a/src/test/java/kr/modusplant/domains/member/domain/vo/TargetCommentPathTest.java +++ b/src/test/java/kr/modusplant/domains/member/domain/vo/TargetCommentPathTest.java @@ -2,13 +2,13 @@ import kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode; import kr.modusplant.shared.exception.EmptyValueException; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static kr.modusplant.domains.member.common.util.domain.vo.MemberBirthDateTestUtils.testMemberBirthDate; import static kr.modusplant.domains.member.common.util.domain.vo.TargetCommentPathTestUtils.testTargetCommentPath; +import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.INVALID_TARGET_COMMENT_PATH; import static kr.modusplant.shared.persistence.common.util.constant.CommCommentConstant.TEST_COMM_COMMENT_PATH; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; @@ -37,9 +37,9 @@ void testCreate_willThrowException() { @Test @DisplayName("정규 표현식에 매칭되지 않는 값으로 create을 호출하여 오류 발생") void testCreate_givenInvalidId_willThrowException() { - InvalidDataException exception = assertThrows(InvalidDataException.class, () -> TargetCommentPath.create("!유효하지않음!")); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.INVALID_INPUT); - assertThat(exception.getDataName()).isEqualTo("targetCommentPath"); + InvalidValueException exception = assertThrows(InvalidValueException.class, () -> TargetCommentPath.create("!유효하지않음!")); + assertThat(exception.getErrorCode()).isEqualTo(INVALID_TARGET_COMMENT_PATH); + assertThat(exception.getValueName()).isEqualTo("targetCommentPath"); } @Test diff --git a/src/test/java/kr/modusplant/domains/member/domain/vo/TargetPostIdTest.java b/src/test/java/kr/modusplant/domains/member/domain/vo/TargetPostIdTest.java index 5a95f2e10..86d342329 100644 --- a/src/test/java/kr/modusplant/domains/member/domain/vo/TargetPostIdTest.java +++ b/src/test/java/kr/modusplant/domains/member/domain/vo/TargetPostIdTest.java @@ -2,13 +2,13 @@ import kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode; import kr.modusplant.shared.exception.EmptyValueException; -import kr.modusplant.shared.exception.InvalidDataException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.InvalidValueException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static kr.modusplant.domains.member.common.util.domain.vo.MemberBirthDateTestUtils.testMemberBirthDate; import static kr.modusplant.domains.member.common.util.domain.vo.TargetPostIdTestUtils.testTargetPostId; +import static kr.modusplant.domains.member.domain.exception.enums.MemberErrorCode.INVALID_TARGET_POST_ID; import static kr.modusplant.shared.persistence.common.util.constant.CommPostConstant.TEST_COMM_POST_ULID; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; @@ -37,9 +37,9 @@ void testCreate_willThrowException() { @Test @DisplayName("정규 표현식에 매칭되지 않는 값으로 create을 호출하여 오류 발생") void testCreate_givenInvalidId_willThrowException() { - InvalidDataException exception = assertThrows(InvalidDataException.class, () -> TargetPostId.create("!유효하지않음!")); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.INVALID_INPUT); - assertThat(exception.getDataName()).isEqualTo("targetPostId"); + InvalidValueException exception = assertThrows(InvalidValueException.class, () -> TargetPostId.create("!유효하지않음!")); + assertThat(exception.getErrorCode()).isEqualTo(INVALID_TARGET_POST_ID); + assertThat(exception.getValueName()).isEqualTo("targetPostId"); } @Test diff --git a/src/test/java/kr/modusplant/infrastructure/advice/GlobalExceptionHandlerTest.java b/src/test/java/kr/modusplant/infrastructure/advice/GlobalExceptionHandlerTest.java index 50a543a13..855527c97 100644 --- a/src/test/java/kr/modusplant/infrastructure/advice/GlobalExceptionHandlerTest.java +++ b/src/test/java/kr/modusplant/infrastructure/advice/GlobalExceptionHandlerTest.java @@ -8,7 +8,7 @@ import jakarta.validation.ConstraintViolationException; import kr.modusplant.framework.jackson.http.response.DataResponse; import kr.modusplant.shared.exception.BusinessException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.enums.GeneralErrorCode; import org.hibernate.validator.internal.engine.path.PathImpl; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -47,8 +47,8 @@ public void testHandleIllegalArgumentException_givenValidGlobalExceptionHandler_ // then assertNotNull(errorResponse); - assertEquals(ErrorCode.INVALID_INPUT.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.INVALID_INPUT.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.INVALID_INPUT.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.INVALID_INPUT.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -62,8 +62,8 @@ public void testHandleIllegalStateException_givenValidGlobalExceptionHandler_ret // then assertNotNull(errorResponse); - assertEquals(ErrorCode.INVALID_STATE.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.INVALID_STATE.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.INVALID_STATE.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.INVALID_STATE.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -82,8 +82,8 @@ public void testHandleMethodArgumentNotValidException_givenValidGlobalExceptionH // then assertNotNull(errorResponse); - assertEquals(ErrorCode.INVALID_INPUT.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.INVALID_INPUT.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.INVALID_INPUT.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.INVALID_INPUT.getCode(), errorResponse.getCode()); assertNull(errorResponse.getData()); } @@ -100,8 +100,8 @@ public void testHandleMethodArgumentTypeMismatchException_givenValidGlobalExcept // then assertNotNull(errorResponse); - assertEquals(ErrorCode.INPUT_TYPE_MISMATCH.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.INPUT_TYPE_MISMATCH.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.MISMATCH_INPUT_TYPE.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.MISMATCH_INPUT_TYPE.getCode(), errorResponse.getCode()); assertNull(errorResponse.getData()); } @@ -125,8 +125,8 @@ public void testHandleConstraintViolationException_givenValidGlobalExceptionHand // then assertNotNull(errorResponse); - assertEquals(ErrorCode.CONSTRAINT_VIOLATION.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.CONSTRAINT_VIOLATION.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.CONSTRAINT_VIOLATION.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.CONSTRAINT_VIOLATION.getCode(), errorResponse.getCode()); assertNull(errorResponse.getData()); } @@ -144,8 +144,8 @@ void testHandleHttpMessageNotReadableException_givenUnrecognizedPropertyExceptio // then assertNotNull(errorResponse); - assertEquals(ErrorCode.UNEXPECTED_INPUT.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.UNEXPECTED_INPUT.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.UNEXPECTED_INPUT.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.UNEXPECTED_INPUT.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -164,8 +164,8 @@ void testHandleHttpMessageNotReadableException_givenJsonMappingException_returnR // then assertNotNull(errorResponse); - assertEquals(ErrorCode.INVALID_INPUT.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.INVALID_INPUT.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.INVALID_INPUT.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.INVALID_INPUT.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -184,8 +184,8 @@ void testHandleHttpMessageNotReadableException_givenJsonParseException_returnRes // then assertNotNull(errorResponse); - assertEquals(ErrorCode.INVALID_INPUT.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.INVALID_INPUT.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.INVALID_INPUT.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.INVALID_INPUT.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -203,8 +203,8 @@ public void testHandleHttpMessageNotReadableException_givenValidGlobalExceptionH // then assertNotNull(errorResponse); - assertEquals(ErrorCode.MALFORMED_INPUT.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.MALFORMED_INPUT.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.MALFORMED_INPUT.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.MALFORMED_INPUT.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -218,8 +218,8 @@ public void testHandleHttpMessageNotWritableException_givenValidGlobalExceptionH // then assertNotNull(errorResponse); - assertEquals(ErrorCode.GENERIC_ERROR.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.GENERIC_ERROR.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.GENERIC_ERROR.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.GENERIC_ERROR.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -243,7 +243,7 @@ public void testHandleHttpMessageNotWritableException_givenValidGlobalExceptionH @DisplayName("BusinessException으로 전역 예외 핸들러 호출") public void testHandleBusinessException_givenValidGlobalExceptionHandler_returnResponse() { // given - BusinessException ex = new BusinessException(ErrorCode.GENERIC_ERROR); + BusinessException ex = new BusinessException(GeneralErrorCode.GENERIC_ERROR); // when ResponseEntity> response = globalExceptionHandler.handleBusinessException(ex); @@ -251,8 +251,8 @@ public void testHandleBusinessException_givenValidGlobalExceptionHandler_returnR // then assertNotNull(errorResponse); - assertEquals(ErrorCode.GENERIC_ERROR.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.GENERIC_ERROR.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.GENERIC_ERROR.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.GENERIC_ERROR.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -270,8 +270,8 @@ public void testHandleRuntimeException_givenValidGlobalExceptionHandler_returnRe // then assertNotNull(errorResponse); - assertEquals(ErrorCode.GENERIC_ERROR.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.GENERIC_ERROR.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.GENERIC_ERROR.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.GENERIC_ERROR.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } @@ -289,8 +289,8 @@ public void testHandleException_givenValidGlobalExceptionHandler_returnResponse( // then assertNotNull(errorResponse); - assertEquals(ErrorCode.GENERIC_ERROR.getHttpStatus(), errorResponse.getStatus()); - assertEquals(ErrorCode.GENERIC_ERROR.getCode(), errorResponse.getCode()); + assertEquals(GeneralErrorCode.GENERIC_ERROR.getHttpStatus(), errorResponse.getStatus()); + assertEquals(GeneralErrorCode.GENERIC_ERROR.getCode(), errorResponse.getCode()); assertNotNull(errorResponse.getMessage()); assertNull(errorResponse.getData()); } diff --git a/src/test/java/kr/modusplant/infrastructure/cache/service/MemberCacheValidationServiceTest.java b/src/test/java/kr/modusplant/infrastructure/cache/service/MemberCacheValidationServiceTest.java index 43ce247a5..323f744b4 100644 --- a/src/test/java/kr/modusplant/infrastructure/cache/service/MemberCacheValidationServiceTest.java +++ b/src/test/java/kr/modusplant/infrastructure/cache/service/MemberCacheValidationServiceTest.java @@ -5,8 +5,9 @@ import kr.modusplant.framework.jpa.entity.SiteMemberProfileEntity; import kr.modusplant.framework.jpa.entity.common.util.SiteMemberEntityTestUtils; import kr.modusplant.framework.jpa.entity.common.util.SiteMemberProfileEntityTestUtils; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; +import kr.modusplant.framework.jpa.exception.enums.EntityErrorCode; import kr.modusplant.framework.jpa.repository.SiteMemberProfileJpaRepository; -import kr.modusplant.shared.exception.EntityNotFoundException; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -23,7 +24,6 @@ import java.util.Optional; import java.util.UUID; -import static kr.modusplant.shared.exception.enums.ErrorCode.MEMBER_PROFILE_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; @@ -44,15 +44,15 @@ void testGetMemberCacheValidationResult_willThrowException() { given(memberProfileJpaRepository.findByUuid(any())).willReturn(Optional.empty()); // when - EntityNotFoundException exception = assertThrows( - EntityNotFoundException.class, + NotFoundEntityException exception = assertThrows( + NotFoundEntityException.class, () -> memberCacheValidationService.getMemberCacheValidationResult( String.format("\"%s\"", passwordEncoder.encode(UUID.randomUUID() + "-0")), ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME), id)); // then - assertThat(exception.getErrorCode()).isEqualTo(MEMBER_PROFILE_NOT_FOUND); + assertThat(exception.getErrorCode()).isEqualTo(EntityErrorCode.NOT_FOUND_MEMBER_PROFILE); } @Test diff --git a/src/test/java/kr/modusplant/infrastructure/jwt/provider/JwtTokenProviderTest.java b/src/test/java/kr/modusplant/infrastructure/jwt/provider/JwtTokenProviderTest.java index bca2e14a4..0b6ed52db 100644 --- a/src/test/java/kr/modusplant/infrastructure/jwt/provider/JwtTokenProviderTest.java +++ b/src/test/java/kr/modusplant/infrastructure/jwt/provider/JwtTokenProviderTest.java @@ -1,7 +1,7 @@ package kr.modusplant.infrastructure.jwt.provider; import kr.modusplant.infrastructure.jwt.exception.TokenKeyCreationException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.infrastructure.jwt.exception.enums.AuthTokenErrorCode; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -58,7 +58,7 @@ void testInit_willThrowTokenKeyCreationException() { assertThatThrownBy(tokenProvider::init) .isInstanceOf(TokenKeyCreationException.class) .extracting("errorCode") - .isEqualTo(ErrorCode.INTERNAL_AUTHENTICATION_FAIL); + .isEqualTo(AuthTokenErrorCode.INTERNAL_AUTHENTICATION_FAIL); } } } \ No newline at end of file diff --git a/src/test/java/kr/modusplant/infrastructure/jwt/service/TokenServiceTest.java b/src/test/java/kr/modusplant/infrastructure/jwt/service/TokenServiceTest.java index 0bd05eab1..c7498e963 100644 --- a/src/test/java/kr/modusplant/infrastructure/jwt/service/TokenServiceTest.java +++ b/src/test/java/kr/modusplant/infrastructure/jwt/service/TokenServiceTest.java @@ -5,6 +5,7 @@ import kr.modusplant.framework.jpa.entity.common.util.SiteMemberAuthEntityTestUtils; import kr.modusplant.framework.jpa.entity.common.util.SiteMemberEntityTestUtils; import kr.modusplant.framework.jpa.entity.common.util.SiteMemberRoleEntityTestUtils; +import kr.modusplant.framework.jpa.exception.NotFoundEntityException; import kr.modusplant.framework.jpa.repository.SiteMemberAuthJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberJpaRepository; import kr.modusplant.framework.jpa.repository.SiteMemberRoleJpaRepository; @@ -17,7 +18,6 @@ import kr.modusplant.infrastructure.jwt.framework.out.redis.AccessTokenRedisRepository; import kr.modusplant.infrastructure.jwt.provider.JwtTokenProvider; import kr.modusplant.infrastructure.security.enums.Role; -import kr.modusplant.shared.exception.EntityNotFoundException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -118,7 +118,7 @@ void testIssueToken_givenNotExistMember_willThrowException() { given(siteMemberJpaRepository.existsByUuid(memberUuid)).willReturn(false); // when & then - assertThrows(EntityNotFoundException.class, () -> tokenService.issueToken(memberUuid,nickname,email,Role.USER)); + assertThrows(NotFoundEntityException.class, () -> tokenService.issueToken(memberUuid,nickname,email,Role.USER)); } } diff --git a/src/test/java/kr/modusplant/shared/kernel/EmailTest.java b/src/test/java/kr/modusplant/shared/kernel/EmailTest.java index f81158e7b..16f9a37aa 100644 --- a/src/test/java/kr/modusplant/shared/kernel/EmailTest.java +++ b/src/test/java/kr/modusplant/shared/kernel/EmailTest.java @@ -1,9 +1,9 @@ package kr.modusplant.shared.kernel; -import kr.modusplant.shared.exception.EmptyEmailException; -import kr.modusplant.shared.exception.InvalidEmailException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; import kr.modusplant.shared.kernel.common.util.EmailTestUtils; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -24,21 +24,21 @@ void testCreate_givenValidEmailString_willReturnEmailVo() { @DisplayName("null이나 빈 문자열으로 이메일 생성시 예외 발생") void testCreate_givenEmptyEmail_willThrowException() { // when & then - EmptyEmailException exception1 = assertThrows(EmptyEmailException.class, () -> Email.create(null)); - EmptyEmailException exception2 = assertThrows(EmptyEmailException.class, () -> Email.create("")); - EmptyEmailException exception3 = assertThrows(EmptyEmailException.class, () -> Email.create(" ")); - assertThat(exception1.getErrorCode()).isEqualTo(ErrorCode.EMAIL_EMPTY); - assertThat(exception2.getErrorCode()).isEqualTo(ErrorCode.EMAIL_EMPTY); - assertThat(exception3.getErrorCode()).isEqualTo(ErrorCode.EMAIL_EMPTY); + EmptyValueException exception1 = assertThrows(EmptyValueException.class, () -> Email.create(null)); + EmptyValueException exception2 = assertThrows(EmptyValueException.class, () -> Email.create("")); + EmptyValueException exception3 = assertThrows(EmptyValueException.class, () -> Email.create(" ")); + assertThat(exception1.getErrorCode()).isEqualTo(KernelErrorCode.EMPTY_EMAIL); + assertThat(exception2.getErrorCode()).isEqualTo(KernelErrorCode.EMPTY_EMAIL); + assertThat(exception3.getErrorCode()).isEqualTo(KernelErrorCode.EMPTY_EMAIL); } @Test @DisplayName("유효하지 않은 문자열로 이메일 생성 시 예외 발생") void testCreate_givenInvalidEmailFormat_willThrowException() { - InvalidEmailException exception1 = assertThrows(InvalidEmailException.class, () -> Email.create("invalid-email")); - InvalidEmailException exception2 = assertThrows(InvalidEmailException.class, () -> Email.create("@example.com")); - assertThat(exception1.getErrorCode()).isEqualTo(ErrorCode.INVALID_EMAIL); - assertThat(exception2.getErrorCode()).isEqualTo(ErrorCode.INVALID_EMAIL); + InvalidValueException exception1 = assertThrows(InvalidValueException.class, () -> Email.create("invalid-email")); + InvalidValueException exception2 = assertThrows(InvalidValueException.class, () -> Email.create("@example.com")); + assertThat(exception1.getErrorCode()).isEqualTo(KernelErrorCode.INVALID_EMAIL_FORMAT); + assertThat(exception2.getErrorCode()).isEqualTo(KernelErrorCode.INVALID_EMAIL_FORMAT); } @Test diff --git a/src/test/java/kr/modusplant/shared/kernel/NicknameTest.java b/src/test/java/kr/modusplant/shared/kernel/NicknameTest.java index 96778005c..41994f150 100644 --- a/src/test/java/kr/modusplant/shared/kernel/NicknameTest.java +++ b/src/test/java/kr/modusplant/shared/kernel/NicknameTest.java @@ -1,8 +1,8 @@ package kr.modusplant.shared.kernel; -import kr.modusplant.shared.exception.EmptyNicknameException; -import kr.modusplant.shared.exception.InvalidNicknameException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -22,22 +22,22 @@ void testCreate_givenValidValue_willReturnNickname() { @Test @DisplayName("null로 create을 호출하여 오류 발생") void testCreate_givenNull_willThrowException() { - EmptyNicknameException exception = assertThrows(EmptyNicknameException.class, () -> Nickname.create(null)); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.NICKNAME_EMPTY); + EmptyValueException exception = assertThrows(EmptyValueException.class, () -> Nickname.create(null)); + assertThat(exception.getErrorCode()).isEqualTo(KernelErrorCode.EMPTY_NICKNAME); } @Test @DisplayName("빈 문자열로 create을 호출하여 오류 발생") void testCreate_givenEmptyString_willThrowException() { - EmptyNicknameException exception = assertThrows(EmptyNicknameException.class, () -> Nickname.create(" ")); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.NICKNAME_EMPTY); + EmptyValueException exception = assertThrows(EmptyValueException.class, () -> Nickname.create(" ")); + assertThat(exception.getErrorCode()).isEqualTo(KernelErrorCode.EMPTY_NICKNAME); } @Test @DisplayName("정규 표현식에 매칭되지 않는 값으로 create을 호출하여 오류 발생") void testCreate_givenInvalidNickname_willThrowException() { - InvalidNicknameException exception = assertThrows(InvalidNicknameException.class, () -> Nickname.create("!유효하지않음!")); - assertThat(exception.getErrorCode()).isEqualTo(ErrorCode.INVALID_NICKNAME); + InvalidValueException exception = assertThrows(InvalidValueException.class, () -> Nickname.create("!유효하지않음!")); + assertThat(exception.getErrorCode()).isEqualTo(KernelErrorCode.INVALID_NICKNAME_FORMAT); } @Test diff --git a/src/test/java/kr/modusplant/shared/kernel/PasswordTest.java b/src/test/java/kr/modusplant/shared/kernel/PasswordTest.java index 685220fd8..86696584d 100644 --- a/src/test/java/kr/modusplant/shared/kernel/PasswordTest.java +++ b/src/test/java/kr/modusplant/shared/kernel/PasswordTest.java @@ -1,9 +1,9 @@ package kr.modusplant.shared.kernel; -import kr.modusplant.shared.exception.EmptyPasswordException; -import kr.modusplant.shared.exception.InvalidPasswordException; -import kr.modusplant.shared.exception.enums.ErrorCode; +import kr.modusplant.shared.exception.EmptyValueException; +import kr.modusplant.shared.exception.InvalidValueException; import kr.modusplant.shared.kernel.common.util.PasswordTestUtils; +import kr.modusplant.shared.kernel.enums.KernelErrorCode; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -16,21 +16,21 @@ public class PasswordTest implements PasswordTestUtils { @DisplayName("null로 비밀번호 생성") public void testCreate_givenNull_willThrowEmptyValueException() { // given - EmptyPasswordException result = assertThrows(EmptyPasswordException.class, () -> Password.create(null)); + EmptyValueException result = assertThrows(EmptyValueException.class, () -> Password.create(null)); // when & then - assertEquals(ErrorCode.PASSWORD_EMPTY, result.getErrorCode()); + assertEquals(KernelErrorCode.EMPTY_PASSWORD, result.getErrorCode()); } @Test @DisplayName("형식에 맞지 않는 값으로 비밀번호 생성") public void testCreate_givenInvalidFormat_willThrowInvalidValueException() { // given - InvalidPasswordException result = assertThrows(InvalidPasswordException.class, + InvalidValueException result = assertThrows(InvalidValueException.class, () -> Password.create("a".repeat(7))); // when & then - assertEquals(ErrorCode.INVALID_PASSWORD, result.getErrorCode()); + assertEquals(KernelErrorCode.INVALID_PASSWORD_FORMAT, result.getErrorCode()); } @Test @@ -43,7 +43,7 @@ void testEquals_givenSameObject_willReturnTrue() { @Test @DisplayName("다른 객체로 동등성 비교") void testEquals_givenDifferentObject_willReturnFalse() { - EmptyPasswordException different = new EmptyPasswordException(); + EmptyValueException different = new EmptyValueException(KernelErrorCode.EMPTY_PASSWORD, "password"); //noinspection AssertBetweenInconvertibleTypes assertNotEquals(testNormalUserPassword, different); }