From 2c44c157a9bd7a03c0e678e9ca55d583e01e29ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EC=84=9C?= <81108344+rlarltj@users.noreply.github.com> Date: Wed, 7 Aug 2024 11:59:31 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Kakao=20Login=20=EC=8B=9C=20Profile=20I?= =?UTF-8?q?mage=EB=A5=BC=20=EB=B0=9B=EC=95=84=EC=98=A8=EB=8B=A4.=20(#20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/api/AuthController.java | 5 ++--- .../domain/auth/oauth/dto/KakaoUserData.java | 10 +++++---- .../auth/oauth/dto/OAuthUserDataResponse.java | 2 +- .../domain/auth/oauth/dto/OAuthUserInfo.java | 5 ++--- .../auth/oauth/handler/KakaoService.java | 21 ++++++++++--------- .../accompany/domain/user/entity/User.java | 20 ++++++++++-------- .../domain/user/service/UserService.java | 4 ++-- .../domain/user/service/UserServiceTest.java | 10 ++++----- 8 files changed, 40 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/dnd/accompany/domain/auth/api/AuthController.java b/src/main/java/com/dnd/accompany/domain/auth/api/AuthController.java index 8021bf4..2493b26 100644 --- a/src/main/java/com/dnd/accompany/domain/auth/api/AuthController.java +++ b/src/main/java/com/dnd/accompany/domain/auth/api/AuthController.java @@ -12,7 +12,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -27,9 +27,8 @@ public class AuthController { private final OAuthService oAuthService; private final UserService userService; - @Operation(summary = "로그인") - @GetMapping("/sign-in") + @PostMapping("/sign-in") public ResponseEntity signIn(@RequestBody LoginRequest loginRequest) { OAuthUserDataResponse oAuthUserData = oAuthService.login(loginRequest); diff --git a/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/KakaoUserData.java b/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/KakaoUserData.java index 81e53c6..ada6356 100644 --- a/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/KakaoUserData.java +++ b/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/KakaoUserData.java @@ -16,7 +16,6 @@ public class KakaoUserData { @Getter @NoArgsConstructor static class KakaoAccount { - private String email; private KakaoProfile profile; } @@ -24,13 +23,16 @@ static class KakaoAccount { @NoArgsConstructor static class KakaoProfile { private String nickname; - } - public String getEmail() { - return kakaoAccount.getEmail(); + @JsonProperty("thumbnail_image_url") + private String profileImage; } public String getNickname() { return kakaoAccount.getProfile().getNickname(); } + + public String getProfileImage() { + return kakaoAccount.getProfile().getProfileImage(); + } } diff --git a/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/OAuthUserDataResponse.java b/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/OAuthUserDataResponse.java index cfbf4bd..0bfd608 100644 --- a/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/OAuthUserDataResponse.java +++ b/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/OAuthUserDataResponse.java @@ -12,6 +12,6 @@ public class OAuthUserDataResponse { private String provider; private String oauthId; - private String email; + private String profileImageUrl; private String nickname; } diff --git a/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/OAuthUserInfo.java b/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/OAuthUserInfo.java index 75b0794..9f43d99 100644 --- a/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/OAuthUserInfo.java +++ b/src/main/java/com/dnd/accompany/domain/auth/oauth/dto/OAuthUserInfo.java @@ -13,15 +13,14 @@ public class OAuthUserInfo { private String provider; private String oauthId; private String nickname; - private String email; - private String appleRefreshToken; + private String profileImageUrl; public static OAuthUserInfo from(OAuthUserDataResponse oAuthUserDataResponse) { return OAuthUserInfo.builder() .provider(oAuthUserDataResponse.getProvider()) .oauthId(oAuthUserDataResponse.getOauthId()) .nickname(oAuthUserDataResponse.getNickname()) - .email(oAuthUserDataResponse.getEmail()) + .profileImageUrl(oAuthUserDataResponse.getProfileImageUrl()) .build(); } } diff --git a/src/main/java/com/dnd/accompany/domain/auth/oauth/handler/KakaoService.java b/src/main/java/com/dnd/accompany/domain/auth/oauth/handler/KakaoService.java index 4a84ea2..12b8664 100644 --- a/src/main/java/com/dnd/accompany/domain/auth/oauth/handler/KakaoService.java +++ b/src/main/java/com/dnd/accompany/domain/auth/oauth/handler/KakaoService.java @@ -48,22 +48,23 @@ public OAuthUserDataResponse getOAuthUserData(OAuthUserDataRequest request) { try { ResponseEntity response = restTemplate.exchange( - url, - HttpMethod.GET, - httpRequest, - KakaoUserData.class + url, + HttpMethod.GET, + httpRequest, + KakaoUserData.class ); assert response.getBody() != null; KakaoUserData userData = response.getBody(); + return OAuthUserDataResponse.builder() - .provider(getAuthProvider().toString()) - .oauthId(userData.getId().toString()) - .email(userData.getEmail()) - .nickname(userData.getNickname()) - .build(); + .provider(getAuthProvider().toString()) + .profileImageUrl(userData.getProfileImage()) + .oauthId(userData.getId().toString()) + .nickname(userData.getNickname()) + .build(); - } catch (RestClientException e) { + } catch (Exception e) { log.warn("[KakaoService] failed to get OAuth User Data = {}", request.getAccessToken()); if (e instanceof RestClientResponseException) { diff --git a/src/main/java/com/dnd/accompany/domain/user/entity/User.java b/src/main/java/com/dnd/accompany/domain/user/entity/User.java index a9920ea..3d50a2b 100644 --- a/src/main/java/com/dnd/accompany/domain/user/entity/User.java +++ b/src/main/java/com/dnd/accompany/domain/user/entity/User.java @@ -31,9 +31,6 @@ public class User extends TimeBaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(nullable = false) - private String email; - @Column(nullable = false) private String nickname; @@ -46,12 +43,17 @@ public class User extends TimeBaseEntity { ) private String oauthId; - public static User of(String email, String nickname, String provider, String oauthId) { + @Column(length = 1000) + private String profileImageUrl; + + private boolean deleted = false; + + public static User of(String nickname, String provider, String oauthId, String profileImageUrl) { return User.builder() - .email(email) - .nickname(nickname) - .provider(provider) - .oauthId(oauthId) - .build(); + .nickname(nickname) + .provider(provider) + .oauthId(oauthId) + .profileImageUrl(profileImageUrl) + .build(); } } diff --git a/src/main/java/com/dnd/accompany/domain/user/service/UserService.java b/src/main/java/com/dnd/accompany/domain/user/service/UserService.java index 510d35a..c3d8dcf 100644 --- a/src/main/java/com/dnd/accompany/domain/user/service/UserService.java +++ b/src/main/java/com/dnd/accompany/domain/user/service/UserService.java @@ -25,10 +25,10 @@ public AuthUserInfo getOrRegister(OAuthUserInfo oauthUserInfo) { @Transactional public User registerUser(OAuthUserInfo oauthUserInfo) { return userRepository.save(User.of( - oauthUserInfo.getEmail(), oauthUserInfo.getNickname(), oauthUserInfo.getProvider(), - oauthUserInfo.getOauthId() + oauthUserInfo.getOauthId(), + oauthUserInfo.getProfileImageUrl() )); } } diff --git a/src/test/java/com/dnd/accompany/domain/user/service/UserServiceTest.java b/src/test/java/com/dnd/accompany/domain/user/service/UserServiceTest.java index fb21892..43e4681 100644 --- a/src/test/java/com/dnd/accompany/domain/user/service/UserServiceTest.java +++ b/src/test/java/com/dnd/accompany/domain/user/service/UserServiceTest.java @@ -39,7 +39,7 @@ void setup() { .provider("KAKAO") .nickname("TESTER1") .oauthId("KA-123") - .email("test@gmail.com") + .profileImageUrl("https://") .build(); oauthUserInfo = OAuthUserInfo.from(oAuthUserDataResponse); @@ -50,10 +50,10 @@ void setup() { void success() { //given User newUser = User.of( - oauthUserInfo.getEmail(), oauthUserInfo.getNickname(), oauthUserInfo.getProvider(), - oauthUserInfo.getOauthId() + oauthUserInfo.getOauthId(), + oauthUserInfo.getProfileImageUrl() ); ReflectionTestUtils.setField(newUser, "id", 1L); @@ -74,10 +74,10 @@ void success() { void success2() { //given User existingUser = User.of( - oauthUserInfo.getEmail(), oauthUserInfo.getNickname(), oauthUserInfo.getProvider(), - oauthUserInfo.getOauthId() + oauthUserInfo.getOauthId(), + oauthUserInfo.getProfileImageUrl() ); ReflectionTestUtils.setField(existingUser, "id", 1L);