Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[REFACROT] 코드 리팩토링 - #102 #106

Merged
merged 4 commits into from
Jul 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.dateroad.advertisement.dto.response;

import org.dateroad.advertisement.domain.AdTagType;

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDate;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.dateroad.advertisement.service;

import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.dateroad.adImage.domain.AdImage;
import org.dateroad.adImage.repository.AdImageRepository;
Expand Down
12 changes: 0 additions & 12 deletions dateroad-api/src/main/java/org/dateroad/auth/jwt/JwtValidator.java

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,6 @@ public String generateRefreshToken(final long userId) {
return token;
}

public void deleteRefreshToken(final Long userId) {
refreshTokenRepository.deleteByUserId(userId);
}

private SecureRandom createSecureRandom() {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,10 +251,10 @@ public CourseGetDetailRes getCourseDetail(final Long userId, final Long courseId

boolean isCourseMine = courseRepository.existsByUserId(foundUser.getId());

boolean isUserLiked = likeRepository.existsByUserIdAndCourseId(foundUser.getId(), foundCourse.getId());
boolean isUserLiked = false;

if (isCourseMine) {
isUserLiked = false;
if (!isCourseMine) {
isUserLiked = likeRepository.existsByUserIdAndCourseId(foundUser.getId(), foundCourse.getId());
}

return CourseGetDetailRes.of(foundCourse,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class UserController {
public ResponseEntity<UserJwtInfoRes> signUp(@RequestHeader(AUTHORIZATION) final String token,
@RequestPart("userSignUpReq") final UserSignUpReq userSignUPReq,
@RequestPart("image") MultipartFile image,
@RequestPart("tag") List<DateTagType> tag //todo: 열람 데이트 코스 전체 조회 API 머지 후, TagEnum으로 변경해야됨
@RequestPart("tag") List<DateTagType> tag
) throws IOException {
UserJwtInfoRes userSignUpRes = authService.signUp(token, userSignUPReq, image, tag);
return ResponseEntity.status(HttpStatus.CREATED).body(userSignUpRes);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public UserJwtInfoRes signUp(final String token, final UserSignUpReq userSignUpR

User newUser = saveUser(userSignUpReq.name(), cachePath + s3Service.uploadImage(path, image), userSignUpReq.platform(), platformUserId);
saveUserTag(newUser, tag);
Token issuedToken = jwtProvider.issueToken(newUser.getId());
Token issuedToken = issueToken(newUser.getId());
return UserJwtInfoRes.of(newUser.getId(), issuedToken.accessToken(), issuedToken.refreshToken());
}

Expand All @@ -68,7 +68,7 @@ public UserJwtInfoRes signIn(final String token, final UserSignInReq userSignInR
String platformUserId = getUserPlatformId(userSignInReq.platform(), token);
User foundUser = getUserByPlatformAndPlatformUserId(userSignInReq.platform(), platformUserId);
deleteRefreshToken(foundUser.getId());
Token issuedToken = jwtProvider.issueToken(foundUser.getId());
Token issuedToken = issueToken(foundUser.getId());
return UserJwtInfoRes.of(foundUser.getId(), issuedToken.accessToken(), issuedToken.refreshToken());
}

Expand All @@ -77,16 +77,15 @@ public UserJwtInfoRes reissue(final String refreshToken) {
RefreshToken foundRefreshToken = getRefreshTokenByToken(refreshToken);
jwtProvider.validateRefreshToken(foundRefreshToken.getExpiredAt());
Long userId = foundRefreshToken.getUserId();
Token newToken = jwtProvider.issueToken(userId);
deleteRefreshToken(userId);
Token newToken = issueToken(userId);
return UserJwtInfoRes.of(userId, newToken.accessToken(), newToken.refreshToken());
}

@Transactional
public void withdraw(final Long userId, final AppleWithdrawAuthCodeReq AppleWithdrawAuthCodeReq) {

//todo: #45브랜치 머지후, 메서드 이용
User foundUser = userRepository.findById(userId).orElseThrow(EntityNotFoundException::new);

if (foundUser.getPlatForm() == Platform.KAKAO) { //카카오 유저면 카카오와 연결 끊기
kakaoFeignProvider.unLinkWithKakao(foundUser.getPlatformUserId());
} else if (foundUser.getPlatForm() == Platform.APPLE) { //애플 유저면 애플이랑 연결 끊기
Expand All @@ -95,8 +94,7 @@ public void withdraw(final Long userId, final AppleWithdrawAuthCodeReq AppleWith
throw new InvalidValueException(FailureCode.INVALID_PLATFORM_TYPE);
}

//todo: #45브랜치 머지후, 메서드 이용
refreshTokenRepository.deleteByUserId(foundUser.getId());
deleteRefreshToken(foundUser.getId());
userRepository.deleteById(foundUser.getId());
}

Expand Down Expand Up @@ -166,7 +164,7 @@ private void validateUserTagSize(final List<DateTagType> userTags) {
}
}

public RefreshToken getRefreshTokenByToken(final String refreshToken) {
private RefreshToken getRefreshTokenByToken(final String refreshToken) {
try {
return refreshTokenRepository.findByToken(refreshToken)
.orElseThrow(() -> new UnauthorizedException(FailureCode.UNAUTHORIZED));
Expand All @@ -181,6 +179,11 @@ public RefreshToken getRefreshTokenByToken(final String refreshToken) {

//refreshToken 삭제
private void deleteRefreshToken(final long userId) {
refreshTokenRepository.deleteByUserId(userId);
refreshTokenRepository.deleteRefreshTokenByUserId(userId);
}

//토큰 발급
Token issueToken(final Long userId) {
return jwtProvider.issueToken(userId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@

@Repository
public interface AdvertisementRepository extends JpaRepository<Advertisement, Long> {
@Query("SELECT a FROM Advertisement a ORDER BY a.createdAt DESC")
@Query("SELECT a FROM advertisements a ORDER BY a.createdAt DESC")
List<Advertisement> findTop5ByOrderByCreatedDateDesc(Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ public interface RefreshTokenRepository extends JpaRepository<RefreshToken, Stri

Optional<RefreshToken> findByToken(String token);

void deleteByUserId(final Long userId);
void deleteRefreshTokenByUserId(final Long userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ public void revokeUser(final String authCode) {
String appleAccessToken = getAppleAccess(secretKey, authCode);
appleFeignApi.revokeUser(secretKey, appleAccessToken, appleProperties.getClientId(), "access_token");
} catch (IOException e) {
System.out.println(e);
throw new UnauthorizedException(FailureCode.INVALID_APPLE_TOKEN_ACCESS);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,62 +1,55 @@
package org.dateroad.feign.kakao;

import com.fasterxml.jackson.databind.ObjectMapper;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dateroad.code.FailureCode;
import org.dateroad.exception.UnauthorizedException;
import org.dateroad.feign.kakao.dto.response.KakaoErrorRes;
import org.dateroad.feign.kakao.dto.response.KakaoAccessTokenInfoRes;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Slf4j
@RequiredArgsConstructor
@Component
public class KakaoPlatformUserIdProvider {
private final KakaoFeignApi kakaoFeignApi;
private final ObjectMapper objectMapper;
private static final String TOKEN_TYPE = "Bearer ";

//AuthService에서 호출 : 카카오에서 주는 userId 받아오기
public String getKakaoPlatformUserId(final String accessToken) {
String kakaoAccessTokenWithTokenType = getAccessTokenWithTokenType(accessToken);
KakaoAccessTokenInfoRes kakaoAccessTokenInfoRes = getKakaoAccessTokenInfo(kakaoAccessTokenWithTokenType);
return String.valueOf(kakaoAccessTokenInfoRes.id());
}

private KakaoAccessTokenInfoRes getKakaoAccessTokenInfo(final String token) {
try {
return kakaoFeignApi.getKakaoPlatformUserId(token);
} catch (FeignException e) {
log.error("Kakao feign exception : ", e);

//kakaoResponseDTO로 변경
KakaoErrorRes errorResponse = convertToKakaoErrorResponse(e.contentUTF8());

//카카오에서 주는 에러 코드가 -1이면 카카오 내부 에러, 나머지는 카카오 액세스 토큰 에러
if (errorResponse.code() == -1) {
log.error("Kakao feign exception : ", e);
throw new UnauthorizedException(FailureCode.KAKAO_INTERNER_ERROR);
} else {
log.error("feign exception : ", e);
throw new UnauthorizedException(FailureCode.INVALID_KAKAO_TOKEN);
}
}
}

private String getAccessTokenWithTokenType(String accessToken) {
return TOKEN_TYPE + accessToken;
}

private KakaoErrorRes convertToKakaoErrorResponse(String responseBody) {
try {
return objectMapper.readValue(responseBody, KakaoErrorRes.class);
} catch (IOException e) {
log.error("Convert To KakaoErrorResponse Error : ", e);
throw new UnauthorizedException(FailureCode.UNAUTHORIZED);
}
}
}
//package org.dateroad.feign.kakao;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import feign.FeignException;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.dateroad.code.FailureCode;
//import org.dateroad.exception.UnauthorizedException;
//import org.dateroad.feign.kakao.dto.response.KakaoErrorRes;
//import org.dateroad.feign.kakao.dto.response.KakaoAccessTokenInfoRes;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//
//@Slf4j
//@RequiredArgsConstructor
//@Component
//public class KakaoPlatformUserIdProvider {
// private final KakaoFeignApi kakaoFeignApi;
// private final ObjectMapper objectMapper;
// private static final String TOKEN_TYPE = "Bearer ";
//
// private KakaoAccessTokenInfoRes getKakaoAccessTokenInfo(final String token) {
// try {
// return kakaoFeignApi.getKakaoPlatformUserId(token);
// } catch (FeignException e) {
// log.error("Kakao feign exception : ", e);
//
// //kakaoResponseDTO로 변경
// KakaoErrorRes errorResponse = convertToKakaoErrorResponse(e.contentUTF8());
//
// //카카오에서 주는 에러 코드가 -1이면 카카오 내부 에러, 나머지는 카카오 액세스 토큰 에러
// if (errorResponse.code() == -1) {
// log.error("Kakao feign exception : ", e);
// throw new UnauthorizedException(FailureCode.KAKAO_INTERNER_ERROR);
// } else {
// log.error("feign exception : ", e);
// throw new UnauthorizedException(FailureCode.INVALID_KAKAO_TOKEN);
// }
// }
// }
//
// private String getAccessTokenWithTokenType(String accessToken) {
// return TOKEN_TYPE + accessToken;
// }
//
// private KakaoErrorRes convertToKakaoErrorResponse(String responseBody) {
// try {
// return objectMapper.readValue(responseBody, KakaoErrorRes.class);
// } catch (IOException e) {
// log.error("Convert To KakaoErrorResponse Error : ", e);
// throw new UnauthorizedException(FailureCode.UNAUTHORIZED);
// }
// }
//}
Loading