diff --git a/.gitignore b/.gitignore index 72265e9..abdb730 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,9 @@ build/ out/ *.jar +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ *.war *.ear diff --git a/build.gradle b/build.gradle index b71c79d..0f66f0e 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ repositories { } ext { - mapstructVersion = "1.6.0.Final" + mapstructVersion = "1.6.3" springDocVersion = "2.5.0" jjwtVersion = "0.12.6" awsSdkVersion = "2.25.68" diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..1b33c55 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/src/main/java/com/teamEWSN/gitdeun/common/exception/ErrorCode.java b/src/main/java/com/teamEWSN/gitdeun/common/exception/ErrorCode.java new file mode 100644 index 0000000..fbdde60 --- /dev/null +++ b/src/main/java/com/teamEWSN/gitdeun/common/exception/ErrorCode.java @@ -0,0 +1,42 @@ +package com.teamEWSN.gitdeun.common.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum ErrorCode { + // 인증 관련 + INVALID_PASSWORD(HttpStatus.UNAUTHORIZED, "AUTH-001", "비밀번호가 일치하지 않습니다."), + REFRESH_TOKEN_EXPIRED(HttpStatus.UNAUTHORIZED, "AUTH-002", "리프레시 토큰이 만료되었습니다."), + NO_TOKEN(HttpStatus.UNAUTHORIZED, "AUTH-003", "토큰이 존재하지 않습니다."), + INVALID_TOKEN(HttpStatus.UNAUTHORIZED, "AUTH-004", "유효하지 않은 토큰입니다."), + ACCESS_DENIED(HttpStatus.UNAUTHORIZED, "AUTH-005", "인증되지 않은 유저입니다."), + DELETE_USER_DENIED(HttpStatus.FORBIDDEN, "AUTH-006", "회원 탈퇴가 거부되었습니다."), + ROLE_NOT_FOUND(HttpStatus.FORBIDDEN, "AUTH-007", "권한 정보가 없습니다."), + + + // 계정 관련 + DUPLICATED_REAL_ID(HttpStatus.CONFLICT, "ACCOUNT-001", "이미 존재하는 아이디입니다."), + USER_NOT_FOUND_BY_REAL_ID(HttpStatus.NOT_FOUND, "ACCOUNT-002", "해당 아이디의 회원을 찾을 수 없습니다."), + FORBIDDEN_ACCESS(HttpStatus.FORBIDDEN, "AUTH-011", "잘못된 접근입니다."), + + + // S3 파일 관련 + FILE_COUNT_EXCEEDED(HttpStatus.BAD_REQUEST, "FILE-001", "업로드 가능한 파일 개수를 초과했습니다."), + FILE_SIZE_EXCEEDED(HttpStatus.BAD_REQUEST, "FILE-002", "파일 크기가 허용된 용량을 초과했습니다."), + INVALID_FILE_TYPE(HttpStatus.BAD_REQUEST, "FILE-003", "지원하지 않는 파일 형식입니다."), + FILE_NOT_FOUND(HttpStatus.NOT_FOUND, "FILE-004", "요청한 파일을 찾을 수 없습니다."), + FILE_UPLOAD_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "FILE-006", "파일 업로드 중 오류가 발생했습니다."), + INVALID_FILE_LIST(HttpStatus.BAD_REQUEST, "FILE-006", "파일 목록이 비어있거나 유효하지 않습니다."), + INVALID_FILE_PATH(HttpStatus.BAD_REQUEST, "FILE-007", "파일 경로나 이름이 유효하지 않습니다."), + FILE_MOVE_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "FILE-008", "파일 이동 중 오류가 발생했습니다."); + + + + private final HttpStatus httpStatus; + private final String code; + private final String message; + +} \ No newline at end of file diff --git a/src/main/java/com/teamEWSN/gitdeun/common/exception/ErrorResponse.java b/src/main/java/com/teamEWSN/gitdeun/common/exception/ErrorResponse.java new file mode 100644 index 0000000..678e896 --- /dev/null +++ b/src/main/java/com/teamEWSN/gitdeun/common/exception/ErrorResponse.java @@ -0,0 +1,24 @@ +package com.teamEWSN.gitdeun.common.exception; + +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; +import org.springframework.http.ResponseEntity; + +@ToString +@Getter +@Builder +public class ErrorResponse { + private final String code; + private final String message; + + public static ResponseEntity toResponseEntity(ErrorCode e) { + return ResponseEntity + .status(e.getHttpStatus()) + .body(ErrorResponse.builder() + .code(e.getCode()) + .message(e.getMessage()) + .build()); + } + +} diff --git a/src/main/java/com/teamEWSN/gitdeun/common/exception/GlobalException.java b/src/main/java/com/teamEWSN/gitdeun/common/exception/GlobalException.java new file mode 100644 index 0000000..10d2404 --- /dev/null +++ b/src/main/java/com/teamEWSN/gitdeun/common/exception/GlobalException.java @@ -0,0 +1,10 @@ +package com.teamEWSN.gitdeun.common.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class GlobalException extends RuntimeException { + ErrorCode errorCode; +} diff --git a/src/main/java/com/teamEWSN/gitdeun/common/exception/GlobalExceptionHandler.java b/src/main/java/com/teamEWSN/gitdeun/common/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..e1ffd1e --- /dev/null +++ b/src/main/java/com/teamEWSN/gitdeun/common/exception/GlobalExceptionHandler.java @@ -0,0 +1,13 @@ +package com.teamEWSN.gitdeun.common.exception; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(GlobalException.class) + public ResponseEntity handleGlobalException(GlobalException e) { + return ErrorResponse.toResponseEntity(e.getErrorCode()); + } +}