diff --git a/src/main/java/org/goormuniv/ponnect/auth/CustomAccessDeniedHandler.java b/src/main/java/org/goormuniv/ponnect/auth/CustomAccessDeniedHandler.java index d4c0d31..e42bff9 100644 --- a/src/main/java/org/goormuniv/ponnect/auth/CustomAccessDeniedHandler.java +++ b/src/main/java/org/goormuniv/ponnect/auth/CustomAccessDeniedHandler.java @@ -4,6 +4,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.goormuniv.ponnect.exception.ErrCode; +import org.goormuniv.ponnect.exception.ErrResponse; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.stereotype.Component; @@ -22,12 +24,14 @@ public void handle(HttpServletRequest request, HttpServletResponse response, Acc throws IOException { ObjectMapper objectMapper = new ObjectMapper(); response.setContentType("application/json;charset=UTF-8"); - Map body = new HashMap<>(); response.setStatus(HttpServletResponse.SC_FORBIDDEN); + ErrResponse errResponse = ErrResponse.builder() + .code(ErrCode.INVALID_ACCESS_TOKEN.getCode()) + .message(ErrCode.INVALID_ACCESS_TOKEN.getMessage()) + .status(ErrCode.INTERNAL_SERVER_ERROR.getStatus()) + .build(); - body.put("message", "엑세스 권한이 없습니다."); - - response.getWriter().write(objectMapper.writeValueAsString(body)); + response.getWriter().write(objectMapper.writeValueAsString(errResponse)); } } \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/auth/CustomAuthenticationEntryPoint.java b/src/main/java/org/goormuniv/ponnect/auth/CustomAuthenticationEntryPoint.java index 7003391..2d60381 100644 --- a/src/main/java/org/goormuniv/ponnect/auth/CustomAuthenticationEntryPoint.java +++ b/src/main/java/org/goormuniv/ponnect/auth/CustomAuthenticationEntryPoint.java @@ -5,6 +5,8 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.goormuniv.ponnect.exception.ErrCode; +import org.goormuniv.ponnect.exception.ErrResponse; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; @@ -23,12 +25,13 @@ public void commence(HttpServletRequest request, HttpServletResponse response, A ObjectMapper objectMapper = new ObjectMapper(); response.setContentType("application/json;charset=UTF-8"); - Map body = new HashMap<>(); + ErrResponse errResponse = ErrResponse.builder() + .code(ErrCode.UNAUTHORIZED.getCode()) + .message(ErrCode.UNAUTHORIZED.getMessage()) + .status(ErrCode.UNAUTHORIZED.getStatus()).build(); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - body.put("message", "인증에 실패했습니다."); - - response.getWriter().write(objectMapper.writeValueAsString(body)); + response.getWriter().write(objectMapper.writeValueAsString(errResponse)); } diff --git a/src/main/java/org/goormuniv/ponnect/auth/JSONLoginFilter.java b/src/main/java/org/goormuniv/ponnect/auth/JSONLoginFilter.java index fb94ff9..c01f8aa 100644 --- a/src/main/java/org/goormuniv/ponnect/auth/JSONLoginFilter.java +++ b/src/main/java/org/goormuniv/ponnect/auth/JSONLoginFilter.java @@ -4,6 +4,8 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.goormuniv.ponnect.dto.LoginDto; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; @@ -17,9 +19,8 @@ import java.util.Map; public class JSONLoginFilter extends AbstractAuthenticationProcessingFilter { + private static final String CONTENT_TYPE = "application/json"; - private static final String USERNAME_KEY = "principal"; - private static final String PASSWORD_KEY = "credential"; private static final AntPathRequestMatcher DEFAULT_LOGIN_PATH_REQUEST_MATCHER = new AntPathRequestMatcher("/api/auth/sign-in", "POST"); // @@ -36,13 +37,12 @@ public Authentication attemptAuthentication(HttpServletRequest request, HttpServ String messageBody = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8); - System.out.println(messageBody.toString()); ObjectMapper objectMapper = new ObjectMapper(); - Map usernamePasswordMap = objectMapper.readValue(messageBody, Map.class); + LoginDto usernamePasswordMap = objectMapper.readValue(messageBody, LoginDto.class); - String email = usernamePasswordMap.get(USERNAME_KEY); - String password = usernamePasswordMap.get(PASSWORD_KEY); + String email = usernamePasswordMap.getPrincipal(); + String password = usernamePasswordMap.getCredential(); System.out.println(email + password); diff --git a/src/main/java/org/goormuniv/ponnect/auth/JwtAuthenticationFilter.java b/src/main/java/org/goormuniv/ponnect/auth/JwtAuthenticationFilter.java index a29ef9f..f2d9fb1 100644 --- a/src/main/java/org/goormuniv/ponnect/auth/JwtAuthenticationFilter.java +++ b/src/main/java/org/goormuniv/ponnect/auth/JwtAuthenticationFilter.java @@ -45,7 +45,6 @@ protected void doFilterInternal( if (accessToken.isPresent() && SecurityContextHolder.getContext().getAuthentication() == null && jwtProvider.validateToken(accessToken.get()) && !redisService.hasKey(accessToken.get())) { String email = jwtProvider.extractUserEmail(accessToken.get()); - try { UserDetails userDetails = principalDetailsServiceImp.loadUserByUsername(email); Authentication authentication = jwtProvider.getAuthentication(userDetails); //Authentication 객체 생성 @@ -53,9 +52,6 @@ protected void doFilterInternal( SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(authentication); SecurityContextHolder.setContext(securityContext); - }catch (Exception exception){ - log.info("jwt 토큰 검증 도중 예외 발생"); - } } diff --git a/src/main/java/org/goormuniv/ponnect/auth/JwtAuthenticationHandler.java b/src/main/java/org/goormuniv/ponnect/auth/JwtAuthenticationHandler.java new file mode 100644 index 0000000..e8599b2 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/auth/JwtAuthenticationHandler.java @@ -0,0 +1,39 @@ +package org.goormuniv.ponnect.auth; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.goormuniv.ponnect.exception.ErrCode; +import org.goormuniv.ponnect.exception.ErrResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; + +@Deprecated +@Slf4j +@Component +public class JwtAuthenticationHandler extends OncePerRequestFilter { + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + try{ + doFilter(request, response, filterChain); + }catch (Exception exception){ + log.info("JwtAuthenticationHandler ::{}", exception.getMessage()); + ObjectMapper objectMapper = new ObjectMapper(); + response.setContentType("application/json;charset=UTF-8"); + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + ErrResponse errResponse = ErrResponse.builder() + .code(ErrCode.INVALID_ACCESS_TOKEN.getCode()) + .message(ErrCode.INVALID_ACCESS_TOKEN.getMessage()) + .status(ErrCode.INVALID_ACCESS_TOKEN.getStatus()) + .build(); + + response.getWriter().write(objectMapper.writeValueAsString(errResponse)); + } + } + +} diff --git a/src/main/java/org/goormuniv/ponnect/auth/JwtProvider.java b/src/main/java/org/goormuniv/ponnect/auth/JwtProvider.java index 327caf8..9441ff5 100644 --- a/src/main/java/org/goormuniv/ponnect/auth/JwtProvider.java +++ b/src/main/java/org/goormuniv/ponnect/auth/JwtProvider.java @@ -42,11 +42,7 @@ public class JwtProvider implements LogoutHandler { @PostConstruct protected void init() { - log.info("secret_key Base64 인코딩시작"); - log.info("Original Secret_Key : " + secret_key); this.secret_key = Base64.getEncoder().encodeToString(secret_key.getBytes(StandardCharsets.UTF_8)); - log.info("Encoded Base64 Secret_Key : " + secret_key); - log.info("secretKey 초기화 완료"); } diff --git a/src/main/java/org/goormuniv/ponnect/auth/LoginFailureHandler.java b/src/main/java/org/goormuniv/ponnect/auth/LoginFailureHandler.java index 2de4f38..e3988f8 100644 --- a/src/main/java/org/goormuniv/ponnect/auth/LoginFailureHandler.java +++ b/src/main/java/org/goormuniv/ponnect/auth/LoginFailureHandler.java @@ -5,6 +5,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.goormuniv.ponnect.exception.ErrCode; +import org.goormuniv.ponnect.exception.ErrResponse; import org.json.JSONException; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; @@ -23,13 +25,11 @@ public void onAuthenticationFailure(HttpServletRequest request, HttpServletRespo ObjectMapper objectMapper = new ObjectMapper(); response.setContentType("application/json;charset=UTF-8"); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - log.info("로그인 실패함"); - Map body = new HashMap<>(); - try { - body.put("message", "이메일 또는 비밀번호가 잘못되었습니다."); - } catch (JSONException e) { - throw new RuntimeException(e); - } - response.getWriter().write(objectMapper.writeValueAsString(body)); + ErrResponse errResponse = ErrResponse.builder() + .code(ErrCode.LOGIN_FAILED.getCode()) + .message(ErrCode.LOGIN_FAILED.getMessage()) + .status(ErrCode.LOGIN_FAILED.getStatus()) + .build(); + response.getWriter().write(objectMapper.writeValueAsString(errResponse)); } } diff --git a/src/main/java/org/goormuniv/ponnect/auth/PrincipalServiceImpl.java b/src/main/java/org/goormuniv/ponnect/auth/PrincipalServiceImpl.java index 08d5eef..d1406de 100644 --- a/src/main/java/org/goormuniv/ponnect/auth/PrincipalServiceImpl.java +++ b/src/main/java/org/goormuniv/ponnect/auth/PrincipalServiceImpl.java @@ -18,18 +18,10 @@ public class PrincipalServiceImpl implements UserDetailsService { private final MemberRepository memberRepository; - @Override - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + public UserDetails loadUserByUsername(String username) { System.out.println(username); - Member member = Member.builder().build(); - try { - member = memberRepository.findByEmail(username).orElseThrow(); - - } catch (Exception exception) { - log.info("사용자를 찾을 수 없음"); - throw new UsernameNotFoundException("사용자를 찾을 수 없습니다."); - } + Member member = memberRepository.findByEmail(username).orElseThrow(() -> new UsernameNotFoundException("사용자를 찾을 수 없습니다.")); return PrincipalDetails.builder() .id(member.getId()) .name(member.getName()) diff --git a/src/main/java/org/goormuniv/ponnect/controller/MemberController.java b/src/main/java/org/goormuniv/ponnect/controller/MemberController.java index bf04540..99c80fc 100644 --- a/src/main/java/org/goormuniv/ponnect/controller/MemberController.java +++ b/src/main/java/org/goormuniv/ponnect/controller/MemberController.java @@ -36,15 +36,7 @@ public ResponseEntity register (Principal principal, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse ) { - try{ return memberService.register(principal, registerDto, httpServletRequest, httpServletResponse); - } - catch (Exception e){ - log.info(e.getMessage()); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ErrMsgDto.builder() - .message("가입이 정상적으로 처리되지 않았습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()).build()); - } } @Operation(summary="JWT 유효성 확인 및 기본 유저 정보 반환", description = "JWT 유효성 확인 및 기본 유저 정보 반환") diff --git a/src/main/java/org/goormuniv/ponnect/dto/CardListDto.java b/src/main/java/org/goormuniv/ponnect/dto/CardListDto.java deleted file mode 100644 index e35bf5b..0000000 --- a/src/main/java/org/goormuniv/ponnect/dto/CardListDto.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.goormuniv.ponnect.dto; - -import lombok.*; - -@Deprecated -@Getter -@Setter -@ToString -@AllArgsConstructor -@NoArgsConstructor -@Builder -public class CardListDto { - private Long userId; - private String name; - private String phone; - private String email; -} diff --git a/src/main/java/org/goormuniv/ponnect/dto/ErrMsgDto.java b/src/main/java/org/goormuniv/ponnect/dto/ErrMsgDto.java index 4db7201..d977a74 100644 --- a/src/main/java/org/goormuniv/ponnect/dto/ErrMsgDto.java +++ b/src/main/java/org/goormuniv/ponnect/dto/ErrMsgDto.java @@ -3,6 +3,7 @@ import lombok.*; +@Deprecated @AllArgsConstructor @NoArgsConstructor @Getter diff --git a/src/main/java/org/goormuniv/ponnect/dto/LoginDto.java b/src/main/java/org/goormuniv/ponnect/dto/LoginDto.java new file mode 100644 index 0000000..79d7f7e --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/dto/LoginDto.java @@ -0,0 +1,14 @@ +package org.goormuniv.ponnect.dto; + +import lombok.*; + +@Getter +@Setter +@ToString +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class LoginDto { + private String principal; + private String credential; +} diff --git a/src/main/java/org/goormuniv/ponnect/exception/CustomException.java b/src/main/java/org/goormuniv/ponnect/exception/CustomException.java new file mode 100644 index 0000000..34f639a --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/CustomException.java @@ -0,0 +1,34 @@ +package org.goormuniv.ponnect.exception; + +import org.springframework.http.HttpStatus; + +public class CustomException extends RuntimeException { + + + private final ErrCode errCode; + + private final HttpStatus httpStatus; + + + public CustomException(final ErrCode errCode, final HttpStatus status) { + super(errCode.getMessage()); + this.errCode = errCode; + this.httpStatus = status; + } +// public CustomException(String message, final ErrCode errCode, final HttpStatus status) { +// super(message); +// this.errCode = errCode; +// this.httpStatus = status; +// } + + + public HttpStatus getStatus() { + return httpStatus; + } + + public ErrCode getErrorCode() { + return errCode; + } + + +} diff --git a/src/main/java/org/goormuniv/ponnect/exception/ErrCode.java b/src/main/java/org/goormuniv/ponnect/exception/ErrCode.java new file mode 100644 index 0000000..7532d7a --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/ErrCode.java @@ -0,0 +1,48 @@ +package org.goormuniv.ponnect.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + + +@Getter +@AllArgsConstructor +public enum ErrCode { + UNAUTHORIZED("P401", "인증에 실패하였습니다.", HttpStatus.UNAUTHORIZED.value()), + INVALID_ACCESS_TOKEN("P007", "JWT가 없습니다.", HttpStatus.FORBIDDEN.value()), + DUPLICATED_EMAIL("P0006", "이미 사용중인 이메일입니다.", HttpStatus.BAD_REQUEST.value()), + LOGIN_FAILED("P001", "아이디 또는 비밀번호가 잘못되었습니다.", HttpStatus.BAD_REQUEST.value()), + SIGN_UP_FAILED("P002", "회원가입에 실패하였습니다.", HttpStatus.NOT_ACCEPTABLE.value()), + REISSUE_FAILED("P003", "비밀번호 재발급에 실패했습니다.", HttpStatus.NOT_ACCEPTABLE.value()), + ALREADY_MEMBER("P004", "이미 가입된 사용자 입니다.", HttpStatus.BAD_REQUEST.value()), + USER_NOT_FOUND("P005", "사용자를 찾을 수 없습니다,", HttpStatus.NOT_FOUND.value()), + + ALREADY_FOLLOW("P100", "이미 추가한 사용자입니다.", HttpStatus.BAD_REQUEST.value()), + + + NO_EXIST_FOLLOW_MEMBER("P101", "해당 회원은 팔로우 된 상태가 아닙니다.", HttpStatus.BAD_REQUEST.value()), + NO_EXIST_CARD("P102","해당 명함이 존재하지 않습니다." , HttpStatus.NOT_FOUND.value()), + + SELF_FOLLOW("P103", "자신을 팔로우 할 수 업습니다.", HttpStatus.BAD_REQUEST.value()), + NO_EXIST_CATEGORY("P104", "해당 카테고리를 찾을 수 없습니다.", HttpStatus.NOT_FOUND.value()), + NOT_CONTENT("P105", "추가할 항목이 없습니다.", HttpStatus.NOT_ACCEPTABLE.value()), + NOT_FOUND_MEMBER("P410", "사용자 정보를 찾을 수 없습니다.", HttpStatus.NOT_FOUND.value()), + INTERNAL_SERVER_ERROR("P500", "서버가 요청 처리에 실패하였습니다..", HttpStatus.INTERNAL_SERVER_ERROR.value()), + CREATE_CARD_TO_CATEGORY_FAILED("P106", "명함함 등록에 실패하였습니다.", HttpStatus.NOT_ACCEPTABLE.value()), + RENAME_CATEGORY_FAILED("P107", "카테고리 이름 수정에 실파하였습니다.", HttpStatus.NOT_ACCEPTABLE.value()), + REMOVE_CARD_OF_CATEGORY_FAILED("P108", "카테고리 내 명함 삭제에 실파하였습니다.", HttpStatus.NOT_ACCEPTABLE.value()), + NO_EXIST_CARD_OF_CATEGORY("P109", "해당 카테고리 내 명함을 찾을 수 없습니다.", HttpStatus.NOT_FOUND.value()), + REMOVE_CATEGORY_FAILED("P110", "해당 카테고리를 삭제할 수 없습니다.", HttpStatus.NOT_ACCEPTABLE.value()), + NO_PERMISSION("P406", "접근 권한이 없어 수행할 수 없습니다.", HttpStatus.NOT_ACCEPTABLE.value()); + + + + + + private final String code; + private final String message; + private final int status; + + + +} diff --git a/src/main/java/org/goormuniv/ponnect/exception/ErrResponse.java b/src/main/java/org/goormuniv/ponnect/exception/ErrResponse.java new file mode 100644 index 0000000..8ad32ba --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/ErrResponse.java @@ -0,0 +1,25 @@ +package org.goormuniv.ponnect.exception; + +import lombok.*; + + +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Setter +@Builder +public class ErrResponse { + + private String code; + + private int status; + + private String message; + + public ErrResponse(ErrCode errCode) { + this.code = errCode.getCode(); + this.message = errCode.getMessage(); + this.status = errCode.getStatus(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/ExceptionAdvisor.java b/src/main/java/org/goormuniv/ponnect/exception/ExceptionAdvisor.java new file mode 100644 index 0000000..2ebdbce --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/ExceptionAdvisor.java @@ -0,0 +1,23 @@ +package org.goormuniv.ponnect.exception; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@Slf4j +@RestControllerAdvice +public class ExceptionAdvisor { + + + @ExceptionHandler(CustomException.class) + protected ResponseEntity handleCustomException(CustomException exception) { + log.info("handleCustomException ::{}", exception.getMessage()); + return ResponseEntity + .status(exception.getStatus()) + .body(new ErrResponse(exception.getErrorCode())); + } + +} diff --git a/src/main/java/org/goormuniv/ponnect/exception/auth/AlreadyMemberException.java b/src/main/java/org/goormuniv/ponnect/exception/auth/AlreadyMemberException.java new file mode 100644 index 0000000..3674c73 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/auth/AlreadyMemberException.java @@ -0,0 +1,11 @@ +package org.goormuniv.ponnect.exception.auth; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class AlreadyMemberException extends CustomException { + public AlreadyMemberException (){ + super(ErrCode.ALREADY_MEMBER, HttpStatus.BAD_REQUEST); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/auth/DuplicatedUsernameException.java b/src/main/java/org/goormuniv/ponnect/exception/auth/DuplicatedUsernameException.java new file mode 100644 index 0000000..17eab74 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/auth/DuplicatedUsernameException.java @@ -0,0 +1,12 @@ +package org.goormuniv.ponnect.exception.auth; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class DuplicatedUsernameException extends CustomException { + public DuplicatedUsernameException (){ + super(ErrCode.DUPLICATED_EMAIL, HttpStatus.BAD_REQUEST); + } +} + diff --git a/src/main/java/org/goormuniv/ponnect/exception/auth/InvalidAccessTokenException.java b/src/main/java/org/goormuniv/ponnect/exception/auth/InvalidAccessTokenException.java new file mode 100644 index 0000000..23d776e --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/auth/InvalidAccessTokenException.java @@ -0,0 +1,12 @@ +package org.goormuniv.ponnect.exception.auth; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class InvalidAccessTokenException extends CustomException { + + public InvalidAccessTokenException(){ + super(ErrCode.INVALID_ACCESS_TOKEN, HttpStatus.FORBIDDEN); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/auth/NoPermissionException.java b/src/main/java/org/goormuniv/ponnect/exception/auth/NoPermissionException.java new file mode 100644 index 0000000..aec932c --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/auth/NoPermissionException.java @@ -0,0 +1,11 @@ +package org.goormuniv.ponnect.exception.auth; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class NoPermissionException extends CustomException { + public NoPermissionException(){ + super(ErrCode.NO_PERMISSION, HttpStatus.NOT_ACCEPTABLE); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/auth/NotFoundMemberException.java b/src/main/java/org/goormuniv/ponnect/exception/auth/NotFoundMemberException.java new file mode 100644 index 0000000..1f4ed7e --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/auth/NotFoundMemberException.java @@ -0,0 +1,11 @@ +package org.goormuniv.ponnect.exception.auth; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class NotFoundMemberException extends CustomException { + public NotFoundMemberException(){ + super(ErrCode.NOT_FOUND_MEMBER, HttpStatus.NOT_FOUND); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/auth/STMPException.java b/src/main/java/org/goormuniv/ponnect/exception/auth/STMPException.java new file mode 100644 index 0000000..0a57b09 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/auth/STMPException.java @@ -0,0 +1,12 @@ +package org.goormuniv.ponnect.exception.auth; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class STMPException extends CustomException { + + public STMPException (){ + super(ErrCode.REISSUE_FAILED, HttpStatus.NOT_ACCEPTABLE); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/auth/SignUpFailedException.java b/src/main/java/org/goormuniv/ponnect/exception/auth/SignUpFailedException.java new file mode 100644 index 0000000..fe32935 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/auth/SignUpFailedException.java @@ -0,0 +1,11 @@ +package org.goormuniv.ponnect.exception.auth; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class SignUpFailedException extends CustomException { + public SignUpFailedException(){ + super(ErrCode.SIGN_UP_FAILED, HttpStatus.NOT_ACCEPTABLE); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/card/NoExistCardException.java b/src/main/java/org/goormuniv/ponnect/exception/card/NoExistCardException.java new file mode 100644 index 0000000..2f20bf1 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/card/NoExistCardException.java @@ -0,0 +1,11 @@ +package org.goormuniv.ponnect.exception.card; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class NoExistCardException extends CustomException { + public NoExistCardException() { + super(ErrCode.NO_EXIST_CARD, HttpStatus.NOT_FOUND); + } +} diff --git a/src/main/java/org/goormuniv/ponnect/exception/card/NotContentException.java b/src/main/java/org/goormuniv/ponnect/exception/card/NotContentException.java new file mode 100644 index 0000000..925dda3 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/card/NotContentException.java @@ -0,0 +1,11 @@ +package org.goormuniv.ponnect.exception.card; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class NotContentException extends CustomException { + public NotContentException() { + super(ErrCode.NOT_CONTENT, HttpStatus.NOT_ACCEPTABLE); + } +} diff --git a/src/main/java/org/goormuniv/ponnect/exception/category/NoCreateCardToCategoryException.java b/src/main/java/org/goormuniv/ponnect/exception/category/NoCreateCardToCategoryException.java new file mode 100644 index 0000000..ffc1234 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/category/NoCreateCardToCategoryException.java @@ -0,0 +1,13 @@ +package org.goormuniv.ponnect.exception.category; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class NoCreateCardToCategoryException extends CustomException { + + + public NoCreateCardToCategoryException (){ + super(ErrCode.CREATE_CARD_TO_CATEGORY_FAILED, HttpStatus.NOT_ACCEPTABLE); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/category/NoExistCardOfCategoryException.java b/src/main/java/org/goormuniv/ponnect/exception/category/NoExistCardOfCategoryException.java new file mode 100644 index 0000000..24d8dc8 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/category/NoExistCardOfCategoryException.java @@ -0,0 +1,13 @@ +package org.goormuniv.ponnect.exception.category; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class NoExistCardOfCategoryException extends CustomException { + + + public NoExistCardOfCategoryException (){ + super(ErrCode.NO_EXIST_CARD_OF_CATEGORY, HttpStatus.NOT_FOUND); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/category/NoExistCategoryException.java b/src/main/java/org/goormuniv/ponnect/exception/category/NoExistCategoryException.java new file mode 100644 index 0000000..6daaf3c --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/category/NoExistCategoryException.java @@ -0,0 +1,13 @@ +package org.goormuniv.ponnect.exception.category; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class NoExistCategoryException extends CustomException { + + + public NoExistCategoryException (){ + super(ErrCode.NO_EXIST_CATEGORY, HttpStatus.NOT_FOUND); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/category/RemoveCardOfCategoryException.java b/src/main/java/org/goormuniv/ponnect/exception/category/RemoveCardOfCategoryException.java new file mode 100644 index 0000000..999873e --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/category/RemoveCardOfCategoryException.java @@ -0,0 +1,13 @@ +package org.goormuniv.ponnect.exception.category; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class RemoveCardOfCategoryException extends CustomException { + + + public RemoveCardOfCategoryException (){ + super(ErrCode.REMOVE_CARD_OF_CATEGORY_FAILED, HttpStatus.NOT_ACCEPTABLE); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/category/RemoveCategoryException.java b/src/main/java/org/goormuniv/ponnect/exception/category/RemoveCategoryException.java new file mode 100644 index 0000000..fe5b2c3 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/category/RemoveCategoryException.java @@ -0,0 +1,13 @@ +package org.goormuniv.ponnect.exception.category; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class RemoveCategoryException extends CustomException { + + + public RemoveCategoryException (){ + super(ErrCode.REMOVE_CATEGORY_FAILED, HttpStatus.NOT_ACCEPTABLE); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/category/RenameCategoryException.java b/src/main/java/org/goormuniv/ponnect/exception/category/RenameCategoryException.java new file mode 100644 index 0000000..0f607a6 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/category/RenameCategoryException.java @@ -0,0 +1,13 @@ +package org.goormuniv.ponnect.exception.category; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class RenameCategoryException extends CustomException { + + + public RenameCategoryException (){ + super(ErrCode.RENAME_CATEGORY_FAILED, HttpStatus.NOT_ACCEPTABLE); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/follow/AlreadyFollowException.java b/src/main/java/org/goormuniv/ponnect/exception/follow/AlreadyFollowException.java new file mode 100644 index 0000000..bd4304e --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/follow/AlreadyFollowException.java @@ -0,0 +1,13 @@ +package org.goormuniv.ponnect.exception.follow; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class AlreadyFollowException extends CustomException { + + + public AlreadyFollowException(){ + super(ErrCode.ALREADY_FOLLOW, HttpStatus.BAD_REQUEST); + } +} diff --git a/src/main/java/org/goormuniv/ponnect/exception/follow/NoExistFollowMemberException.java b/src/main/java/org/goormuniv/ponnect/exception/follow/NoExistFollowMemberException.java new file mode 100644 index 0000000..7af54dd --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/follow/NoExistFollowMemberException.java @@ -0,0 +1,12 @@ +package org.goormuniv.ponnect.exception.follow; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class NoExistFollowMemberException extends CustomException { + public NoExistFollowMemberException(){ + super(ErrCode.NO_EXIST_FOLLOW_MEMBER, HttpStatus.BAD_REQUEST); + } +} + diff --git a/src/main/java/org/goormuniv/ponnect/exception/follow/SelfFollowException.java b/src/main/java/org/goormuniv/ponnect/exception/follow/SelfFollowException.java new file mode 100644 index 0000000..1830f9b --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/follow/SelfFollowException.java @@ -0,0 +1,11 @@ +package org.goormuniv.ponnect.exception.follow; + +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +public class SelfFollowException extends CustomException { + public SelfFollowException(){ + super(ErrCode.SELF_FOLLOW, HttpStatus.BAD_REQUEST); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/exception/server/InternalServerException.java b/src/main/java/org/goormuniv/ponnect/exception/server/InternalServerException.java new file mode 100644 index 0000000..77d1910 --- /dev/null +++ b/src/main/java/org/goormuniv/ponnect/exception/server/InternalServerException.java @@ -0,0 +1,14 @@ +package org.goormuniv.ponnect.exception.server; + +import lombok.extern.slf4j.Slf4j; +import org.goormuniv.ponnect.exception.CustomException; +import org.goormuniv.ponnect.exception.ErrCode; +import org.springframework.http.HttpStatus; + +@Slf4j +public class InternalServerException extends CustomException { + public InternalServerException(Exception exception) { + super(ErrCode.INTERNAL_SERVER_ERROR, HttpStatus.INTERNAL_SERVER_ERROR); + log.info("Internal Server Error ::{}", exception.getMessage()); + } +} \ No newline at end of file diff --git a/src/main/java/org/goormuniv/ponnect/service/CardService.java b/src/main/java/org/goormuniv/ponnect/service/CardService.java index b61f13b..256ba0f 100644 --- a/src/main/java/org/goormuniv/ponnect/service/CardService.java +++ b/src/main/java/org/goormuniv/ponnect/service/CardService.java @@ -1,19 +1,21 @@ package org.goormuniv.ponnect.service; -import com.amazonaws.services.kms.model.NotFoundException; import jakarta.persistence.criteria.*; import jakarta.transaction.Transactional; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.goormuniv.ponnect.domain.*; import org.goormuniv.ponnect.dto.*; +import org.goormuniv.ponnect.exception.auth.NotFoundMemberException; +import org.goormuniv.ponnect.exception.card.NoExistCardException; +import org.goormuniv.ponnect.exception.follow.AlreadyFollowException; +import org.goormuniv.ponnect.exception.follow.NoExistFollowMemberException; +import org.goormuniv.ponnect.exception.follow.SelfFollowException; import org.goormuniv.ponnect.repository.*; import org.springframework.data.jpa.domain.Specification; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import java.awt.*; import java.security.Principal; import java.util.*; import java.util.List; @@ -35,8 +37,7 @@ public ResponseEntity createCard(CardCreateDto cardCreateDto, Principal princ Map response = new HashMap<>(); - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); Card card = member.getCard(); card = Card.builder() .id(card.getId()) @@ -105,20 +106,12 @@ public ResponseEntity createCard(CardCreateDto cardCreateDto, Principal princ .collect(Collectors.toList())) .build(); response.put("userInfo", cardDto); - } catch (Exception e){ - log.error(e.getMessage()); - log.info("회원이 없음"); - return new ResponseEntity<>( ErrMsgDto.builder() - .message("회원이 존재하지 않습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(),HttpStatus.BAD_REQUEST); - - } return ResponseEntity.ok().body(response); } public ResponseEntity getMyCard(Principal principal) { CardDto cardDto; - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); cardDto = CardDto.builder() .cardId(member.getCard().getId()) .userId(member.getId()) @@ -152,30 +145,16 @@ public ResponseEntity getMyCard(Principal principal) { .build()) .collect(Collectors.toList())) .build(); - - }catch(Exception e){ - log.info("회원이 없음"); - return new ResponseEntity<>( ErrMsgDto.builder() - .message("회원이 존재하지 않습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(),HttpStatus.BAD_REQUEST); - } return ResponseEntity.ok(cardDto); } @Transactional public ResponseEntity saveCard(Long userId, Principal principal) { Map response = new HashMap<>(); - try { - Member following = memberRepository.findByEmail(principal.getName()).orElseThrow(() -> new NotFoundException("로그인한 회원을 찾을 수 없습니다.")); - Member followed = memberRepository.findById(userId).orElseThrow(() -> new NotFoundException("해당 회원을 찾을 수 없습니다.")); - if(following.getId().equals(followed.getId())){ //자기자신을 팔로우 한다고 한다면 400 반환 - return ResponseEntity.badRequest().body(ErrMsgDto.builder() - .message("자신의 명함을 저장할 수 업습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()) - .build()); - } - - if (followRepository.existsByFollowingIdAndFollowedId(following.getId(), followed.getId())) - throw new NullPointerException("follow가 이미 존재합니다."); + Member following = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); + Member followed = memberRepository.findById(userId).orElseThrow(NotFoundMemberException::new); + if(following.getId().equals(followed.getId())) throw new SelfFollowException(); + if (followRepository.existsByFollowingIdAndFollowedId(following.getId(), followed.getId())) throw new AlreadyFollowException(); Follow follow = Follow.builder() @@ -187,32 +166,10 @@ public ResponseEntity saveCard(Long userId, Principal principal) { response.put("followId", follow.getId()); return ResponseEntity.ok(response); - } catch (NullPointerException e) { - log.info("follow가 이미 존재합니다.", e); - return ResponseEntity.badRequest().body(ErrMsgDto.builder() - .message("오류가 발생했습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()) - .build()); - } - catch (NotFoundException e) { - log.info("회원을 찾을 수 없음", e); - return ResponseEntity.badRequest().body(ErrMsgDto.builder() - .message("오류가 발생했습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()) - .build()); - } catch(Exception e){ - log.error("알 수 없는 오류 발생", e); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(ErrMsgDto.builder() - .message("서버 오류가 발생했습니다.") - .statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value()) - .build()); - } } public ResponseEntity getAllCard (Principal principal, String keyword) { - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); Specification specification = search(keyword, member.getId()); //여기서 에러가 나는것 같다. @@ -256,11 +213,6 @@ public ResponseEntity getAllCard (Principal principal, String keyword) { .toList(); return ResponseEntity.ok(cardDtos); - }catch(Exception e){ - log.info("회원이 없음"); - return new ResponseEntity<>( ErrMsgDto.builder() - .message("회원이 존재하지 않습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(),HttpStatus.BAD_REQUEST); - } } private Specification search(String kw, Long memberId) { @@ -296,13 +248,12 @@ private Specification search(String kw, Long memberId) { } public ResponseEntity deleteCard (Long userId, Principal principal) { //삭제 메서드 수행 시, 카테고리에 존재하는 영역 모두 삭제해야함 - try { - Member following = memberRepository.findByEmail(principal.getName()).orElseThrow(); + Member following = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); Follow follow = followRepository.findByFollowingIdAndFollowedId(following.getId(), userId); - if (follow == null) throw new NullPointerException("해당 팔로우가 존재하지 않습니다."); + if (follow == null) throw new NoExistFollowMemberException(); List category = categoryRepository.findAllByMemberId(following.getId()); for(Category categoryEntity : category){ @@ -313,18 +264,12 @@ public ResponseEntity deleteCard (Long userId, Principal principal) { //삭 followRepository.delete(follow); //팔로우 삭제하기 전에 명함함에 존재하는 해당 명함을 우선 삭제해준다. return ResponseEntity.ok().body("delete complete"); - } catch(NullPointerException e){ - log.info("해당 팔로우가 존재하지 않음", e); - return new ResponseEntity<>( ErrMsgDto.builder() - .message("오류가 발생했습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(),HttpStatus.BAD_REQUEST); - } } public ResponseEntity changeColor (ColorDto colorDto, Principal principal) { - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(() -> new NoSuchElementException("회원 정보를 찾을 수 없습니다.")); + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); - Card card = cardRepository.findByMemberId(member.getId()).orElseThrow(() -> new NoSuchElementException("카드 정보를 찾을 수 없습니다.")); + Card card = cardRepository.findByMemberId(member.getId()).orElseThrow(NoExistCardException::new); // 배경색, 글자색 변경 Card updateCard = Card.builder() @@ -370,15 +315,6 @@ public ResponseEntity changeColor (ColorDto colorDto, Principal principal) { return ResponseEntity.ok().body("save complete"); - } catch(NoSuchElementException e){ - log.info("회원 정보가 없음"+ e.getMessage()); - return new ResponseEntity<>( ErrMsgDto.builder() - .message("오류가 발생했습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(),HttpStatus.BAD_REQUEST); - } catch(Exception e) { - log.info("오류 발생"); - return new ResponseEntity<>( ErrMsgDto.builder() - .message("오류가 발생했습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(),HttpStatus.BAD_REQUEST); - } } } diff --git a/src/main/java/org/goormuniv/ponnect/service/CategoryService.java b/src/main/java/org/goormuniv/ponnect/service/CategoryService.java index f09a721..eb0e23a 100644 --- a/src/main/java/org/goormuniv/ponnect/service/CategoryService.java +++ b/src/main/java/org/goormuniv/ponnect/service/CategoryService.java @@ -7,6 +7,11 @@ import lombok.extern.slf4j.Slf4j; import org.goormuniv.ponnect.domain.*; import org.goormuniv.ponnect.dto.*; +import org.goormuniv.ponnect.exception.auth.NotFoundMemberException; +import org.goormuniv.ponnect.exception.card.NoExistCardException; +import org.goormuniv.ponnect.exception.card.NotContentException; +import org.goormuniv.ponnect.exception.category.*; +import org.goormuniv.ponnect.exception.server.InternalServerException; import org.goormuniv.ponnect.repository.*; import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; @@ -36,55 +41,39 @@ public class CategoryService { @Transactional public ResponseEntity createCategory(Principal principal, CategoryCreateDto categoryCreateDto) { Map response = new HashMap<>(); - if (categoryCreateDto.getCategoryName() == null) { - return ResponseEntity.badRequest().body(ErrMsgDto.builder().message("카테고리가 없습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build()); - } - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); - Category category = Category.builder().categoryName(categoryCreateDto.getCategoryName()).build(); - category.setMember(member); - categoryRepository.save(category); + if (categoryCreateDto.getCategoryName() == null) throw new NoExistCategoryException(); + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); + Category category = Category.builder().categoryName(categoryCreateDto.getCategoryName()).build(); + category.setMember(member); + categoryRepository.save(category); - response.put("categoryId", category.getId()); - } catch (Exception e) { - log.info("회원이 없음"); - return new ResponseEntity<>(ErrMsgDto.builder() - .message("회원이 존재하지 않습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(), HttpStatus.BAD_REQUEST); + response.put("categoryId", category.getId()); - } return ResponseEntity.ok().body(response); } //GET /api/card/category 목록 보기 public ResponseEntity getCategory(Principal principal) { - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); - List categoryList = categoryRepository.findAllByMemberId(member.getId()).stream().map(category -> { - return CategoryDto.builder() - .categoryId(category.getId()) - .categoryName(category.getCategoryName()) - .build(); - }).toList(); - return ResponseEntity.ok(categoryList); - } catch (Exception e) { - log.info("회원이 없음"); - return new ResponseEntity<>(ErrMsgDto.builder() - .message("회원이 존재하지 않습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(), HttpStatus.BAD_REQUEST); - } + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); + List categoryList = categoryRepository.findAllByMemberId(member.getId()).stream().map(category -> { + return CategoryDto.builder() + .categoryId(category.getId()) + .categoryName(category.getCategoryName()) + .build(); + }).toList(); + return ResponseEntity.ok(categoryList); } @Transactional public ResponseEntity postCategoryToCard(Principal principal, CardToCategoryDto cardToCategoryDto) { try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); - Category category = categoryRepository.findCategoryByIdAndMemberId(cardToCategoryDto.getCategoryId(), member.getId()).orElseThrow(); + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); + Category category = categoryRepository.findCategoryByIdAndMemberId(cardToCategoryDto.getCategoryId(), member.getId()).orElseThrow(NoExistCategoryException::new); List cardIdDtoList = cardToCategoryDto.getCardIdList(); - if (cardIdDtoList.isEmpty()) { - return ResponseEntity.badRequest().body(ErrMsgDto.builder().message("추가할 항목이 없습니다.").statusCode(HttpStatus.NO_CONTENT.value()).build()); - } + if (cardIdDtoList.isEmpty()) throw new NotContentException(); for (CardIdDto cardIdDto : cardIdDtoList) { if (cardRepository.findCardById(cardIdDto.getCardId()).isPresent()) { CardCategory cardCategory = CardCategory.builder() @@ -99,17 +88,14 @@ public ResponseEntity postCategoryToCard(Principal principal, CardToCategoryD } catch (Exception e) { log.info(e.getMessage()); - return new ResponseEntity<>(ErrMsgDto.builder() - .message("추가에 실패하였습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(), HttpStatus.BAD_REQUEST); + throw new NoCreateCardToCategoryException(); } } public ResponseEntity getAllCardOfCategory(Long categoryId, Principal principal, String keyword) { - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); - - Specification specification = search(keyword, categoryId); //여기서 에러가 나는것 같다. + memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); + Specification specification = search(keyword, categoryId); List cardDtos = cardCategoryRepository.findAll(specification).stream() .map(cardCategory -> { Member memberEntity = cardCategory.getMember(); @@ -150,190 +136,178 @@ public ResponseEntity getAllCardOfCategory(Long categoryId, Principal princip .toList(); return ResponseEntity.ok(cardDtos); - } catch (Exception e) { - log.info(e.getMessage()); - return new ResponseEntity<>(ErrMsgDto.builder() - .message("회원이 존재하지 않습니다.").statusCode(HttpStatus.BAD_REQUEST.value()).build(), HttpStatus.BAD_REQUEST); + } - } - private Specification search(String kw, Long categoryId) { - return (Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) -> { - criteriaQuery.distinct(true); - Predicate followIdPredicate = criteriaBuilder.equal(root.get("category").get("id"), categoryId); - Join CardCategoryJoin = root.join("member", JoinType.INNER); - Join cardJoin = CardCategoryJoin.join("card", JoinType.INNER); - Predicate cardPredicate = criteriaBuilder.equal(cardJoin.get("id"), CardCategoryJoin.get("id")); - - - Predicate searchPredicate = criteriaBuilder.or(criteriaBuilder.like(CardCategoryJoin.get("name"), "%" + kw + "%"), // 제목 - criteriaBuilder.like(CardCategoryJoin.get("email"), "%" + kw + "%"), // 내용 - criteriaBuilder.like(CardCategoryJoin.get("phone"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("content"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("organization"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("instagram"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("youtube"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("facebook"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("status"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("x"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("tiktok"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("naver"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("linkedIn"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("notefolio"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("behance"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("github"), "%" + kw + "%"), - criteriaBuilder.like(cardJoin.get("kakao"), "%" + kw + "%") - ); - - return criteriaBuilder.and(followIdPredicate, cardPredicate, searchPredicate); - }; - } + private Specification search (String kw, Long categoryId){ + return (Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) -> { + criteriaQuery.distinct(true); + Predicate followIdPredicate = criteriaBuilder.equal(root.get("category").get("id"), categoryId); + Join CardCategoryJoin = root.join("member", JoinType.INNER); + Join cardJoin = CardCategoryJoin.join("card", JoinType.INNER); + Predicate cardPredicate = criteriaBuilder.equal(cardJoin.get("id"), CardCategoryJoin.get("id")); + + + Predicate searchPredicate = criteriaBuilder.or(criteriaBuilder.like(CardCategoryJoin.get("name"), "%" + kw + "%"), // 제목 + criteriaBuilder.like(CardCategoryJoin.get("email"), "%" + kw + "%"), // 내용 + criteriaBuilder.like(CardCategoryJoin.get("phone"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("content"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("organization"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("instagram"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("youtube"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("facebook"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("status"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("x"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("tiktok"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("naver"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("linkedIn"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("notefolio"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("behance"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("github"), "%" + kw + "%"), + criteriaBuilder.like(cardJoin.get("kakao"), "%" + kw + "%") + ); + + return criteriaBuilder.and(followIdPredicate, cardPredicate, searchPredicate); + }; + } - public ResponseEntity getNotBelongCards(Long categoryId, Principal principal, String search) { - //try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); + public ResponseEntity getNotBelongCards (Long categoryId, Principal principal, String search){ + //try { + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); Specification specification = notBelongSearch(search, categoryId, member.getId()); //여기서 에러가 나는것 같다. List list = memberRepository.findAll(specification).stream() - .map(memberEntity -> { - return CardDto.builder() - .userId(memberEntity.getId()) - .name(memberEntity.getName()) - .phone(memberEntity.getPhone()) - .email(memberEntity.getEmail()) - .qrUrl(memberEntity.getQrUrl()) - .cardId(memberEntity.getCard().getId()) - .instagram(memberEntity.getCard().getInstagram()) - .organization(memberEntity.getCard().getOrganization()) - .status(memberEntity.getCard().getStatus()) - .link(memberEntity.getCard().getLink()) - .content(memberEntity.getCard().getContent()) - .youtube(memberEntity.getCard().getYoutube()) - .facebook(memberEntity.getCard().getFacebook()) - .x(memberEntity.getCard().getX()) - .tiktok(memberEntity.getCard().getTiktok()) - .naver(memberEntity.getCard().getNaver()) - .linkedIn(memberEntity.getCard().getLinkedIn()) - .notefolio(memberEntity.getCard().getNotefolio()) - .behance(memberEntity.getCard().getBehance()) - .github(memberEntity.getCard().getGithub()) - .kakao(memberEntity.getCard().getKakao()) - .bgColor(memberEntity.getCard().getBgColor()) - .textColor(memberEntity.getCard().getTextColor()) - .stickerDtoList(mediaRepository.findAllByCardId(memberEntity.getCard().getId()).stream() - .map(media -> StickerDto.builder() - .type(media.getType()) - .posX(media.getPosX()) - .posY(media.getPosY()) - .zindex(media.getZIndex()) - .build()) - .collect(Collectors.toList())) - .build(); - }) - .toList(); + .map(memberEntity -> { + return CardDto.builder() + .userId(memberEntity.getId()) + .name(memberEntity.getName()) + .phone(memberEntity.getPhone()) + .email(memberEntity.getEmail()) + .qrUrl(memberEntity.getQrUrl()) + .cardId(memberEntity.getCard().getId()) + .instagram(memberEntity.getCard().getInstagram()) + .organization(memberEntity.getCard().getOrganization()) + .status(memberEntity.getCard().getStatus()) + .link(memberEntity.getCard().getLink()) + .content(memberEntity.getCard().getContent()) + .youtube(memberEntity.getCard().getYoutube()) + .facebook(memberEntity.getCard().getFacebook()) + .x(memberEntity.getCard().getX()) + .tiktok(memberEntity.getCard().getTiktok()) + .naver(memberEntity.getCard().getNaver()) + .linkedIn(memberEntity.getCard().getLinkedIn()) + .notefolio(memberEntity.getCard().getNotefolio()) + .behance(memberEntity.getCard().getBehance()) + .github(memberEntity.getCard().getGithub()) + .kakao(memberEntity.getCard().getKakao()) + .bgColor(memberEntity.getCard().getBgColor()) + .textColor(memberEntity.getCard().getTextColor()) + .stickerDtoList(mediaRepository.findAllByCardId(memberEntity.getCard().getId()).stream() + .map(media -> StickerDto.builder() + .type(media.getType()) + .posX(media.getPosX()) + .posY(media.getPosY()) + .zindex(media.getZIndex()) + .build()) + .collect(Collectors.toList())) + .build(); + }) + .toList(); - return ResponseEntity.ok(list); - } + return ResponseEntity.ok(list); + } - private Specification notBelongSearch(String kw, Long categoryId, Long memberId) { - return (Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) -> { - - - Subquery followedSubquery = criteriaQuery.subquery(Long.class); - Root followedSubRoot = followedSubquery.from(Follow.class); - followedSubquery.select(followedSubRoot.get("followed").get("id")); // Selecting followed memberId - followedSubquery.where(criteriaBuilder.equal(followedSubRoot.get("following").get("id"), memberId)); // Filtering by memberId - - - Subquery categoryMembersSubquery = criteriaQuery.subquery(Long.class); - Root categoryMembersSubRoot = categoryMembersSubquery.from(CardCategory.class); - categoryMembersSubquery.select(categoryMembersSubRoot.get("member").get("id")); // Selecting memberId from CardCategory - categoryMembersSubquery.where(criteriaBuilder.equal(categoryMembersSubRoot.get("category").get("id"), categoryId)); // Filtering by categoryId - - Predicate searchPredicate = criteriaBuilder.or(criteriaBuilder.like(root.get("name"), "%" + kw + "%"), // 제목 - criteriaBuilder.like(root.get("email"), "%" + kw + "%"), // 내용 - criteriaBuilder.like(root.get("phone"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("content"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("organization"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("instagram"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("youtube"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("status"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("facebook"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("x"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("tiktok"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("naver"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("linkedIn"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("notefolio"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("behance"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("github"), "%" + kw + "%"), - criteriaBuilder.like(root.get("card").get("kakao"), "%" + kw + "%") - ); - - - return criteriaBuilder.and( - root.get("id").in(followedSubquery), - criteriaBuilder.not(root.get("id").in(categoryMembersSubquery) - ), searchPredicate - ); - }; - } + private Specification notBelongSearch (String kw, Long categoryId, Long memberId){ + return (Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) -> { + + + Subquery followedSubquery = criteriaQuery.subquery(Long.class); + Root followedSubRoot = followedSubquery.from(Follow.class); + followedSubquery.select(followedSubRoot.get("followed").get("id")); // Selecting followed memberId + followedSubquery.where(criteriaBuilder.equal(followedSubRoot.get("following").get("id"), memberId)); // Filtering by memberId + + + Subquery categoryMembersSubquery = criteriaQuery.subquery(Long.class); + Root categoryMembersSubRoot = categoryMembersSubquery.from(CardCategory.class); + categoryMembersSubquery.select(categoryMembersSubRoot.get("member").get("id")); // Selecting memberId from CardCategory + categoryMembersSubquery.where(criteriaBuilder.equal(categoryMembersSubRoot.get("category").get("id"), categoryId)); // Filtering by categoryId + + Predicate searchPredicate = criteriaBuilder.or(criteriaBuilder.like(root.get("name"), "%" + kw + "%"), // 제목 + criteriaBuilder.like(root.get("email"), "%" + kw + "%"), // 내용 + criteriaBuilder.like(root.get("phone"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("content"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("organization"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("instagram"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("youtube"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("status"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("facebook"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("x"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("tiktok"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("naver"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("linkedIn"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("notefolio"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("behance"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("github"), "%" + kw + "%"), + criteriaBuilder.like(root.get("card").get("kakao"), "%" + kw + "%") + ); + + + return criteriaBuilder.and( + root.get("id").in(followedSubquery), + criteriaBuilder.not(root.get("id").in(categoryMembersSubquery) + ), searchPredicate + ); + }; + } - @Transactional - public ResponseEntity renameCategoryName(Principal principal, Long categoryId, CategoryRenameDto categoryRenameDto) { - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); - Category category = categoryRepository.findCategoryByIdAndMemberId(categoryId, member.getId()).orElseThrow(); - category.setCategoryName(categoryRenameDto.getCategoryName()); - return ResponseEntity.ok().build(); - } catch (Exception e) { - log.info(e.getMessage()); - return new ResponseEntity<>(ErrMsgDto.builder() - .message("카테고리 이름을 수정할 수 없습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()).build(), - HttpStatus.BAD_REQUEST); + @Transactional + public ResponseEntity renameCategoryName (Principal principal, Long categoryId, CategoryRenameDto + categoryRenameDto){ + try{ + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); + Category category = categoryRepository.findCategoryByIdAndMemberId(categoryId, member.getId()).orElseThrow(NoExistCategoryException::new); + category.setCategoryName(categoryRenameDto.getCategoryName()); + return ResponseEntity.ok().build(); + } catch (Exception e) { + log.info(e.getMessage()); + throw new RenameCategoryException(); + } } - } - @Transactional - public ResponseEntity removeCategory(Principal principal, Long categoryId) { - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); - Category category = categoryRepository.findCategoryByIdAndMemberId(categoryId, member.getId()).orElseThrow(); - List cardCategories = cardCategoryRepository.findByCategoryId(categoryId); - cardCategoryRepository.deleteAll(cardCategories); - categoryRepository.delete(category); - - return ResponseEntity.ok().build(); - } catch (Exception e) { - log.info(e.getMessage()); - return new ResponseEntity<>(ErrMsgDto.builder() - .message("카테고리를 삭제할 수 없습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()).build(), - HttpStatus.BAD_REQUEST); + @Transactional + public ResponseEntity removeCategory (Principal principal, Long categoryId){ + try { + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); + Category category = categoryRepository.findCategoryByIdAndMemberId(categoryId, member.getId()).orElseThrow(NoExistCategoryException::new); + List cardCategories = cardCategoryRepository.findByCategoryId(categoryId); + cardCategoryRepository.deleteAll(cardCategories); + categoryRepository.delete(category); + + return ResponseEntity.ok().build(); + } catch (Exception e) { + log.info(e.getMessage()); + throw new RemoveCategoryException(); + } } - } - @Transactional - public ResponseEntity removeCardOfCategory(Principal principal, Long categoryId, Long cardId) { - try { - Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(); - categoryRepository.findCategoryByIdAndMemberId(categoryId, member.getId()).orElseThrow(); - Card card = cardRepository.findCardById(cardId).orElseThrow(); - CardCategory cardCategoroy = cardCategoryRepository.findCardCategoryByCategoryIdAndMemberId(categoryId, card.getMember().getId()).orElseThrow(); + @Transactional + public ResponseEntity removeCardOfCategory (Principal principal, Long categoryId, Long cardId){ + try { + Member member = memberRepository.findByEmail(principal.getName()).orElseThrow(NotFoundMemberException::new); + categoryRepository.findCategoryByIdAndMemberId(categoryId, member.getId()).orElseThrow(NoExistCategoryException::new); + Card card = cardRepository.findCardById(cardId).orElseThrow(NoExistCardException::new); + CardCategory cardCategory = cardCategoryRepository.findCardCategoryByCategoryIdAndMemberId(categoryId, card.getMember().getId()).orElseThrow(NoExistCardOfCategoryException::new); - cardCategoryRepository.delete(cardCategoroy); - return ResponseEntity.ok().build(); - } catch (Exception e) { - log.info(e.getMessage()); - return new ResponseEntity<>(ErrMsgDto.builder() - .message("해당 명함을 삭제할 수 없습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()).build(), - HttpStatus.BAD_REQUEST); + cardCategoryRepository.delete(cardCategory); + return ResponseEntity.ok().build(); + } catch (Exception e) { + log.info(e.getMessage()); + throw new RemoveCardOfCategoryException(); + } } } -} diff --git a/src/main/java/org/goormuniv/ponnect/service/MemberService.java b/src/main/java/org/goormuniv/ponnect/service/MemberService.java index c55d49a..59b13a2 100644 --- a/src/main/java/org/goormuniv/ponnect/service/MemberService.java +++ b/src/main/java/org/goormuniv/ponnect/service/MemberService.java @@ -15,6 +15,7 @@ import org.goormuniv.ponnect.domain.Card; import org.goormuniv.ponnect.domain.Member; import org.goormuniv.ponnect.dto.*; +import org.goormuniv.ponnect.exception.auth.*; import org.goormuniv.ponnect.repository.CardRepository; import org.goormuniv.ponnect.repository.MemberRepository; import org.goormuniv.ponnect.util.AmazonStorageUtil; @@ -31,6 +32,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayOutputStream; @@ -57,38 +59,19 @@ public class MemberService { private final JwtProvider jwtProvider; + //토큰 유효성 검사 public ResponseEntity validateJwt(HttpServletRequest httpServletRequest) throws ServletException, IOException { - Optional accessToken = jwtProvider.extractAccessToken(httpServletRequest); - if (accessToken.isPresent()) { - jwtProvider.validateToken(accessToken.get()); - String email = jwtProvider.extractUserEmail(accessToken.get()); - - Optional member = memberRepository.findByEmail(email); - if (member.isPresent()) { - return new ResponseEntity<>(HttpStatus.OK); - } else { - return new ResponseEntity<>(ErrMsgDto.builder() - .statusCode(HttpStatus.BAD_REQUEST.value()) - .message("유저 정보가 없습니다.").build(), HttpStatus.BAD_REQUEST); - } - } else { - return new ResponseEntity<>(ErrMsgDto.builder() - .statusCode(HttpStatus.BAD_REQUEST.value()) - .message("토큰이 유효하지 않습니다.").build() - , HttpStatus.BAD_REQUEST); - - } - + String accessToken = jwtProvider.extractAccessToken(httpServletRequest).orElseThrow(InvalidAccessTokenException::new); + jwtProvider.validateToken(accessToken); + String email = jwtProvider.extractUserEmail(accessToken); + memberRepository.findByEmail(email).orElseThrow(NotFoundMemberException::new); + return new ResponseEntity<>(HttpStatus.OK); } @Transactional public ResponseEntity register(Principal principal, RegisterDto registerDto, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { - if (principal != null) { //SecurityContext에 없다면 예외처리 - return new ResponseEntity<>(ErrMsgDto.builder().message("이미 회원가입이 완료되었습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()).build(), HttpStatus.NOT_ACCEPTABLE); - } + if (principal != null) throw new NoPermissionException(); try { - Member member = Member.builder() .email(registerDto.getEmail()) .name(registerDto.getName()) @@ -116,12 +99,9 @@ public ResponseEntity register(Principal principal, RegisterDto registerDto, .name(member.getName()) .build(); return new ResponseEntity<>(authenticationDto, httpHeaders, HttpStatus.CREATED); - - } catch (Exception exception) { - log.error(exception.getMessage()); - return new ResponseEntity<>(ErrMsgDto.builder().message("회원가입이 실패했습니다.") - .statusCode(HttpStatus.BAD_REQUEST.value()) - .build(), HttpStatus.BAD_REQUEST); + } catch (Exception e) { + log.error("Register Error ::{}", e.getMessage()); + throw new SignUpFailedException(); } } @@ -137,20 +117,14 @@ public ResponseEntity validUserInfo(UserInfoDto userInfoDto) { @Transactional public ResponseEntity reissue(UserInfoDto userInfoDto) { String newPw = UUID.randomUUID().toString().substring(0, 8).toUpperCase(); - Optional member = memberRepository.findByEmailAndPhone(userInfoDto.getEmail(), userInfoDto.getPhone()); - - if (member.isPresent()) { - member.get().setPassword(passwordEncoder.encode(newPw)); - } else { - return new ResponseEntity<>(ErrMsgDto.builder() - .statusCode(HttpStatus.BAD_REQUEST.value()) - .message("유저 정보가 없습니다.").build(), HttpStatus.BAD_REQUEST); - } + Member member = memberRepository.findByEmailAndPhone(userInfoDto.getEmail(), userInfoDto.getPhone()).orElseThrow(NotFoundMemberException::new); + + member.setPassword(passwordEncoder.encode(newPw)); try { SMTPMsgDto smtpMsgDto = SMTPMsgDto.builder() - .address(member.get().getEmail()) - .title(member.get().getName() + "님의 PONNECT 임시비밀번호 안내 이메일 입니다.") - .message("안녕하세요. PONNECT 임시 비밀번호 안내 관련 이메일 입니다. " + "[" + member.get().getName() + "]" + "님의 임시 비밀번호는 " + .address(member.getEmail()) + .title(member.getName() + "님의 PONNECT 임시비밀번호 안내 이메일 입니다.") + .message("안녕하세요. PONNECT 임시 비밀번호 안내 관련 이메일 입니다. " + "[" + member.getName() + "]" + "님의 임시 비밀번호는 " + newPw + " 입니다.").build(); SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); simpleMailMessage.setTo(smtpMsgDto.getAddress()); @@ -158,10 +132,8 @@ public ResponseEntity reissue(UserInfoDto userInfoDto) { simpleMailMessage.setText(smtpMsgDto.getMessage()); javaMailSender.send(simpleMailMessage); } catch (Exception exception) { - log.info(exception.getMessage()); - return new ResponseEntity<>(ErrMsgDto.builder() - .statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value()) - .message("메일 발송이 실패했습니다.").build(), HttpStatus.INTERNAL_SERVER_ERROR); + log.error("PW Reissue ::{} ", exception.getMessage()); + throw new STMPException(); } return ResponseEntity.ok().build(); }