Skip to content

Commit

Permalink
#18 [Update] 코드 리팩토링
Browse files Browse the repository at this point in the history
성공 및 에러 응답값 통일
  • Loading branch information
Anna-Jin committed Jul 18, 2022
1 parent e1bca38 commit 708bc97
Show file tree
Hide file tree
Showing 19 changed files with 59 additions and 82 deletions.
4 changes: 2 additions & 2 deletions src/main/java/com/mpnp/baechelin/BaechelinApplication.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.mpnp.baechelin;

import com.mpnp.baechelin.config.properties.AppProperties;
import com.mpnp.baechelin.config.properties.CorsProperties;
import com.mpnp.baechelin.common.properties.AppProperties;
import com.mpnp.baechelin.common.properties.CorsProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.mpnp.baechelin.api.model.LocationAddressSearchForm;
import com.mpnp.baechelin.config.httpclient.HttpConfig;
import com.mpnp.baechelin.common.httpclient.HttpConfig;
import com.mpnp.baechelin.api.model.LocationKeywordSearchForm;
import com.mpnp.baechelin.store.domain.Category;
import lombok.RequiredArgsConstructor;
Expand Down
11 changes: 0 additions & 11 deletions src/main/java/com/mpnp/baechelin/api/service/PublicApiService.java
Original file line number Diff line number Diff line change
@@ -1,33 +1,22 @@
package com.mpnp.baechelin.api.service;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mpnp.baechelin.config.httpclient.HttpConfig;
import com.mpnp.baechelin.api.dto.*;
import com.mpnp.baechelin.api.model.LocationKeywordSearchForm;
import com.mpnp.baechelin.store.domain.Category;
import com.mpnp.baechelin.store.domain.Store;
import com.mpnp.baechelin.store.repository.StoreRepository;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.*;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.stereotype.Service;
import org.springframework.util.StopWatch;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.UriComponentsBuilder;
import software.amazon.ion.Decimal;

import javax.transaction.Transactional;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mpnp.baechelin.config;
package com.mpnp.baechelin.common;

import com.mpnp.baechelin.store.domain.Category;
import com.querydsl.core.BooleanBuilder;
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/com/mpnp/baechelin/common/SuccessResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.mpnp.baechelin.common;

import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpStatus;

import java.time.LocalDateTime;

@Getter
@NoArgsConstructor
public class SuccessResponse {
private final LocalDateTime timestamp = LocalDateTime.now();
private final HttpStatus status = HttpStatus.OK;
private final String code = "S-SUC200";
private final String result = "SUCCESS";
private String message;

public SuccessResponse(String message) {
this.message = message;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mpnp.baechelin.config.httpclient;
package com.mpnp.baechelin.common.httpclient;

import io.netty.channel.ChannelOption;
import io.netty.handler.timeout.ReadTimeoutHandler;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mpnp.baechelin.config.properties;
package com.mpnp.baechelin.common.properties;

import lombok.AllArgsConstructor;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mpnp.baechelin.config.properties;
package com.mpnp.baechelin.common.properties;

import lombok.Getter;
import lombok.Setter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.mpnp.baechelin.config.security;

import com.mpnp.baechelin.config.properties.AppProperties;
import com.mpnp.baechelin.config.properties.CorsProperties;
import com.mpnp.baechelin.common.properties.AppProperties;
import com.mpnp.baechelin.common.properties.CorsProperties;
import com.mpnp.baechelin.login.oauth.entity.RoleType;
import com.mpnp.baechelin.login.jwt.exception.RestAuthenticationEntryPoint;
import com.mpnp.baechelin.login.jwt.filter.TokenAuthenticationFilter;
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/com/mpnp/baechelin/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
@RequiredArgsConstructor
public enum ErrorCode {

SUCCESS_MESSAGE(200, "S-SUC200","SUCCESS"),
// NOT_FOUND_MESSAGE(500, "BE001", "NOT FOUND"),
FAILED_MESSAGE(500, "E-FAI500","서버에서 오류가 발생하였습니다."),
INVALID_ACCESS_TOKEN(401, "E-IAT401","유효하지 않은 Access Token입니다."),
INVALID_REFRESH_TOKEN(401, "E-IRT401", "유효하지 않은 Refresh Token입니다."),
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/mpnp/baechelin/exception/ErrorResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@
public class ErrorResponse {
private final LocalDateTime timestamp = LocalDateTime.now();
private final int status;
private final String error;
private final String code;
private final String error;
private final String message;

public static ResponseEntity<ErrorResponse> toResponseEntity(ErrorCode errorCode) {
return ResponseEntity
.status(errorCode.getStatus())
.body(ErrorResponse.builder()
.status(errorCode.getStatus())
.error(errorCode.getCode())
.code(errorCode.name())
.code(errorCode.getCode())
.error(errorCode.name())
.message(errorCode.getMessage())
.build()
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class TokenController {

@ApiOperation(value = "Access Token 만료 시 Refresh Token을 이용하여 재발급 받는 메소드")
@GetMapping("/refresh")
public AuthResponse<?> refreshToken (HttpServletRequest request, HttpServletResponse response) {
public AuthResponse refreshToken (HttpServletRequest request, HttpServletResponse response) {
return tokenService.refreshToken(request, response);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.mpnp.baechelin.login.jwt.service;

import com.mpnp.baechelin.config.properties.AppProperties;
import com.mpnp.baechelin.common.properties.AppProperties;
import com.mpnp.baechelin.exception.CustomException;
import com.mpnp.baechelin.exception.ErrorCode;
import com.mpnp.baechelin.login.oauth.common.AuthResponse;
import com.mpnp.baechelin.login.oauth.entity.RoleType;
import com.mpnp.baechelin.login.jwt.AuthToken;
Expand Down Expand Up @@ -34,7 +36,7 @@ public class TokenService {
private final static String REFRESH_TOKEN = "refresh_token";


public AuthResponse<?> refreshToken(HttpServletRequest request, HttpServletResponse response) {
public AuthResponse refreshToken(HttpServletRequest request, HttpServletResponse response) {
String accessToken = HeaderUtil.getAccessToken(request);
AuthToken authToken = tokenProvider.convertAuthToken(accessToken);

Expand All @@ -46,10 +48,10 @@ public AuthResponse<?> refreshToken(HttpServletRequest request, HttpServletRespo

// 유효한 access token 인지, 만료된 token 인지 확인
if (authToken.getExpiredTokenClaims() == null) {
return AuthResponse.invalidAccessToken();
throw new CustomException(ErrorCode.INVALID_ACCESS_TOKEN);
} else {
if (AccessValidTime >= FIVE_MINIUTE_MSEC) {
return AuthResponse.notExpiredTokenYet();
throw new CustomException(ErrorCode.NOT_EXPIRED_TOKEN_YET);
}
}

Expand All @@ -63,13 +65,13 @@ public AuthResponse<?> refreshToken(HttpServletRequest request, HttpServletRespo
AuthToken authRefreshToken = tokenProvider.convertAuthToken(refreshToken);

if (!authRefreshToken.tokenValidate()) {
return AuthResponse.invalidRefreshToken();
throw new CustomException(ErrorCode.INVALID_REFRESH_TOKEN);
}

// userId와 refresh token 으로 DB 확인
UserRefreshToken userRefreshToken = userRefreshTokenRepository.findBySocialIdAndRefreshToken(userId, refreshToken);
if (userRefreshToken == null) {
return AuthResponse.invalidRefreshToken();
throw new CustomException(ErrorCode.INVALID_REFRESH_TOKEN);
}

// Access token 재발급
Expand Down Expand Up @@ -102,6 +104,6 @@ public AuthResponse<?> refreshToken(HttpServletRequest request, HttpServletRespo
CookieUtil.addCookie(response, REFRESH_TOKEN, authRefreshToken.getToken(), cookieMaxAge);
}

return AuthResponse.success("token", newAccessToken.getToken());
return new AuthResponse(newAccessToken.getToken());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,48 +3,23 @@
import com.mpnp.baechelin.exception.ErrorCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

@Getter
@RequiredArgsConstructor
public class AuthResponse<T> {
public class AuthResponse {

private final AuthResponseHeader header;
private final Map<String, T> body;
private final LocalDateTime timestamp = LocalDateTime.now();
private final HttpStatus status = HttpStatus.OK;
private final String code = "S-SUC200";
private final String result = "SUCCESS";
private String token;

public static <T> AuthResponse<T> success(String name, T body) {
Map<String, T> map = new HashMap<>();
map.put(name, body);

return new AuthResponse<>(new AuthResponseHeader(
ErrorCode.SUCCESS_MESSAGE.getCode(),
ErrorCode.SUCCESS_MESSAGE.getMessage()), map);
}

// 이 밑에 코드는 전부 exception 으로 빼기
public static <T> AuthResponse<T> fail() {
return new AuthResponse<>(new AuthResponseHeader(
ErrorCode.FAILED_MESSAGE.getCode(),
ErrorCode.FAILED_MESSAGE.getMessage()), null);
}

public static <T> AuthResponse<T> invalidAccessToken() {
return new AuthResponse<>(new AuthResponseHeader(
ErrorCode.INVALID_ACCESS_TOKEN.getCode(),
ErrorCode.INVALID_ACCESS_TOKEN.getMessage()), null);
}

public static <T> AuthResponse<T> invalidRefreshToken() {
return new AuthResponse<>(new AuthResponseHeader(
ErrorCode.INVALID_REFRESH_TOKEN.getCode(),
ErrorCode.INVALID_REFRESH_TOKEN.getMessage()), null);
}

public static <T> AuthResponse<T> notExpiredTokenYet() {
return new AuthResponse<>(new AuthResponseHeader(
ErrorCode.NOT_EXPIRED_TOKEN_YET.getCode(),
ErrorCode.NOT_EXPIRED_TOKEN_YET.getMessage()), null);
public AuthResponse(String token) {
this.token = token;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.mpnp.baechelin.login.oauth.handler;

import com.mpnp.baechelin.config.properties.AppProperties;
import com.mpnp.baechelin.common.properties.AppProperties;
import com.mpnp.baechelin.login.oauth.entity.ProviderType;
import com.mpnp.baechelin.login.oauth.entity.RoleType;
import com.mpnp.baechelin.login.oauth.info.OAuth2UserInfo;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package com.mpnp.baechelin.review.repository;

import com.mpnp.baechelin.config.QuerydslLocation;
import com.mpnp.baechelin.common.QuerydslLocation;
import com.mpnp.baechelin.review.domain.Review;
import com.mpnp.baechelin.store.domain.Store;
import com.mpnp.baechelin.user.domain.User;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
import org.springframework.stereotype.Repository;

Expand All @@ -15,7 +12,6 @@
import java.util.List;

import static com.mpnp.baechelin.review.domain.QReview.review;
import static com.mpnp.baechelin.store.domain.QStore.store;

@Repository
@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package com.mpnp.baechelin.store.repository;

import com.mpnp.baechelin.config.QuerydslLocation;
import com.mpnp.baechelin.review.domain.Review;
import com.mpnp.baechelin.common.QuerydslLocation;
import com.mpnp.baechelin.store.domain.Store;
import com.mpnp.baechelin.store.dto.StoreCardResponseDto;
import com.mpnp.baechelin.store.dto.StoreResponseDto;
import com.mpnp.baechelin.user.domain.User;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -19,9 +16,8 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.stream.Collectors;

import static com.mpnp.baechelin.config.QuerydslLocation.locTwoPointAndConditions;
import static com.mpnp.baechelin.common.QuerydslLocation.locTwoPointAndConditions;
import static com.mpnp.baechelin.store.domain.QStore.store;

@Repository
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.mpnp.baechelin.store.service;

import com.mpnp.baechelin.bookmark.repository.BookmarkRepository;
import com.mpnp.baechelin.config.QuerydslLocation;
import com.mpnp.baechelin.common.QuerydslLocation;
import com.mpnp.baechelin.review.domain.Review;
import com.mpnp.baechelin.review.repository.ReviewRepository;
import com.mpnp.baechelin.store.domain.Store;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.mpnp.baechelin;

import com.mpnp.baechelin.config.httpclient.HttpConfig;
import com.mpnp.baechelin.common.httpclient.HttpConfig;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
Expand Down

0 comments on commit 708bc97

Please sign in to comment.