Skip to content

Commit

Permalink
refactor: 공통 BaseErrorCode 정의 (#153)
Browse files Browse the repository at this point in the history
Co-authored-by: 조은비 <[email protected]>
  • Loading branch information
kimday0326 and eunbc committed Jan 8, 2024
1 parent 4aa9e8b commit b15c196
Show file tree
Hide file tree
Showing 10 changed files with 40 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.pgms.apimember.exception;

import com.pgms.coredomain.domain.common.MemberErrorCode;

import lombok.Getter;

@Getter
public class AdminException extends CustomException {

public AdminException(CustomErrorCode errorCode) {
public AdminException(MemberErrorCode errorCode) {
super(errorCode);
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.pgms.apimember.exception;

import com.pgms.coredomain.domain.common.MemberErrorCode;

import lombok.Getter;

@Getter
public class CustomException extends RuntimeException {

protected final CustomErrorCode errorCode;
protected final MemberErrorCode errorCode;

public CustomException(CustomErrorCode errorCode) {
public CustomException(MemberErrorCode errorCode) {
super(errorCode.getMessage());
this.errorCode = errorCode;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.pgms.apimember.exception;

import java.util.List;
import java.util.Objects;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -11,6 +10,7 @@
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import com.pgms.coredomain.domain.common.MemberErrorCode;
import com.pgms.coredomain.response.ErrorResponse;

import lombok.extern.slf4j.Slf4j;
Expand All @@ -29,20 +29,17 @@ protected ResponseEntity<ErrorResponse> handleGlobalException(Exception ex) {
@ExceptionHandler(CustomException.class)
protected ResponseEntity<ErrorResponse> handleEventCustomException(CustomException ex) {
log.warn(">>>>> Custom Exception : {}", ex);
CustomErrorCode errorCode = ex.getErrorCode();
ErrorResponse errorResponse = new ErrorResponse(errorCode.getErrorCode(), errorCode.getMessage());
return ResponseEntity.status(errorCode.getStatus()).body(errorResponse);
MemberErrorCode errorCode = ex.getErrorCode();
return ResponseEntity.status(errorCode.getStatus()).body(errorCode.getErrorResponse());
}

@ExceptionHandler(MethodArgumentNotValidException.class)
protected ResponseEntity<ErrorResponse> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
log.warn(">>>>> validation Failed : {}", ex);
BindingResult bindingResult = ex.getBindingResult();
String errorMessage = Objects.requireNonNull(bindingResult.getFieldError())
.getDefaultMessage();

List<FieldError> fieldErrors = bindingResult.getFieldErrors();
ErrorResponse errorResponse = new ErrorResponse(CustomErrorCode.VALIDATION_FAILED.getErrorCode(), errorMessage);
ErrorResponse errorResponse = MemberErrorCode.VALIDATION_FAILED.getErrorResponse();
fieldErrors.forEach(error -> errorResponse.addValidation(error.getField(), error.getDefaultMessage()));
return ResponseEntity.status(ex.getStatusCode()).body(errorResponse);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.pgms.apimember.exception;

import com.pgms.coredomain.domain.common.MemberErrorCode;

import lombok.Getter;

@Getter
public class MemberException extends CustomException {

public MemberException(CustomErrorCode errorCode) {
public MemberException(MemberErrorCode errorCode) {
super(errorCode);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.pgms.apimember.exception;

import com.pgms.coredomain.domain.common.MemberErrorCode;

public class SecurityException extends CustomException {
public SecurityException(CustomErrorCode errorCode) {
public SecurityException(MemberErrorCode errorCode) {
super(errorCode);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.pgms.apimember.service;

import static com.pgms.apimember.exception.CustomErrorCode.*;
import static com.pgms.coredomain.domain.common.MemberErrorCode.*;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
import com.pgms.apimember.dto.request.LoginRequest;
import com.pgms.apimember.dto.request.RefreshTokenRequest;
import com.pgms.apimember.dto.response.AuthResponse;
import com.pgms.apimember.exception.CustomErrorCode;
import com.pgms.apimember.exception.SecurityException;
import com.pgms.apimember.redis.RefreshToken;
import com.pgms.apimember.redis.RefreshTokenRepository;
import com.pgms.coredomain.domain.common.MemberErrorCode;
import com.pgms.coresecurity.security.jwt.JwtTokenProvider;
import com.pgms.coresecurity.security.service.AdminUserDetailsService;
import com.pgms.coresecurity.security.service.MemberUserDetailsService;
Expand Down Expand Up @@ -57,7 +57,7 @@ public AuthResponse login(LoginRequest request, String accountType) {
public AuthResponse refresh(RefreshTokenRequest request) {
// refresh token이 만료됐는지 확인
RefreshToken refreshToken = refreshTokenRepository.findById(request.refreshToken())
.orElseThrow(() -> new SecurityException(CustomErrorCode.REFRESH_TOKEN_EXPIRED));
.orElseThrow(() -> new SecurityException(MemberErrorCode.REFRESH_TOKEN_EXPIRED));

// 회원 정보 로드
UserDetailsImpl userDetails = loadUserDetails(refreshToken.getAccountType(), refreshToken.getEmail());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.pgms.apimember.service;

import static com.pgms.apimember.exception.CustomErrorCode.*;
import static com.pgms.coredomain.domain.common.MemberErrorCode.*;

import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
Expand All @@ -10,8 +10,8 @@
import com.pgms.apimember.dto.request.MemberPasswordUpdateRequest;
import com.pgms.apimember.dto.request.MemberSignUpRequest;
import com.pgms.apimember.dto.response.MemberDetailGetResponse;
import com.pgms.apimember.exception.CustomErrorCode;
import com.pgms.apimember.exception.MemberException;
import com.pgms.coredomain.domain.common.MemberErrorCode;
import com.pgms.coredomain.domain.member.Member;
import com.pgms.coredomain.domain.member.repository.MemberRepository;

Expand Down Expand Up @@ -40,7 +40,7 @@ public Long signUp(MemberSignUpRequest requestDto) {
public MemberDetailGetResponse getMemberDetail(Long memberId) {
return MemberDetailGetResponse.from(
memberRepository.findById(memberId).
orElseThrow(() -> new MemberException(CustomErrorCode.MEMBER_NOT_FOUND)));
orElseThrow(() -> new MemberException(MemberErrorCode.MEMBER_NOT_FOUND)));
}

@Transactional(readOnly = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.pgms.coredomain.domain.common;

import com.pgms.coredomain.response.ErrorResponse;

public interface BaseErrorCode {
ErrorResponse getErrorResponse();
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.pgms.apimember.exception;
package com.pgms.coredomain.domain.common;

import org.springframework.http.HttpStatus;

import com.pgms.coredomain.response.ErrorResponse;

import lombok.Getter;

@Getter
public enum CustomErrorCode {
public enum MemberErrorCode implements BaseErrorCode {
// ADMIN
ADMIN_NOT_FOUND("NOT FOUND", HttpStatus.NOT_FOUND, "존재하지 않는 관리자입니다."),
DUPLICATED_ADMIN_EMAIL("DUPLICATED ADMIN EMAIL", HttpStatus.BAD_REQUEST, "이미 존재하는 관리자 이메일입니다."),
Expand Down Expand Up @@ -34,9 +36,14 @@ public enum CustomErrorCode {
private final HttpStatus status;
private final String message;

CustomErrorCode(String errorCode, HttpStatus status, String message) {
MemberErrorCode(String errorCode, HttpStatus status, String message) {
this.errorCode = errorCode;
this.status = status;
this.message = message;
}

@Override
public ErrorResponse getErrorResponse() {
return new ErrorResponse(errorCode, message);
}
}

0 comments on commit b15c196

Please sign in to comment.