From af2cb5e8c3035c30b2ac55c1aba479e1a524a4d8 Mon Sep 17 00:00:00 2001 From: gol2580 Date: Tue, 25 Feb 2025 17:57:36 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat/#43=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=20=EB=8B=89=EB=84=A4=EC=9E=84=EA=B3=BC=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=ED=95=A8?= =?UTF-8?q?=EA=BB=98=20return?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/SucceSS/domain/Member.java | 9 ++++++++ .../service/MemberService/AuthService.java | 15 +++++++------ .../SucceSS/web/dto/KakaoAccountDto.java | 4 ++++ .../SucceSS/web/dto/LoginResponseDto.java | 21 ++++++++++++------- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/example/SucceSS/domain/Member.java b/src/main/java/com/example/SucceSS/domain/Member.java index e81f9ed..c5b0283 100644 --- a/src/main/java/com/example/SucceSS/domain/Member.java +++ b/src/main/java/com/example/SucceSS/domain/Member.java @@ -3,6 +3,7 @@ import com.example.SucceSS.domain.common.BaseEntity; import com.example.SucceSS.domain.common.Role; import com.example.SucceSS.domain.enums.*; +import com.example.SucceSS.web.dto.KakaoAccountDto; import jakarta.persistence.*; import lombok.*; import org.antlr.v4.runtime.misc.NotNull; @@ -29,6 +30,9 @@ public class Member extends BaseEntity { @Column(name = "nickname") private String nickname; + @Column(name="profileImgUrl") + private String profileImgUrl; + @NotNull @Enumerated(EnumType.STRING) @Column(name="user_role") @@ -48,4 +52,9 @@ public class Member extends BaseEntity { @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true) private List memberHobbies = new ArrayList<>(); + public void updateProfile(KakaoAccountDto userInfo) { + this.nickname = userInfo.getKakaoAccount().getProfile().getNickName(); + this.profileImgUrl = userInfo.getKakaoAccount().getProfile().getProfileImgUrl(); + } + } diff --git a/src/main/java/com/example/SucceSS/service/MemberService/AuthService.java b/src/main/java/com/example/SucceSS/service/MemberService/AuthService.java index f2f5da7..54f8d57 100644 --- a/src/main/java/com/example/SucceSS/service/MemberService/AuthService.java +++ b/src/main/java/com/example/SucceSS/service/MemberService/AuthService.java @@ -7,6 +7,7 @@ import com.example.SucceSS.repository.MemberRepository; import com.example.SucceSS.web.dto.KakaoAccountDto; import com.example.SucceSS.web.dto.LoginResponseDto; +import com.example.SucceSS.web.dto.TokenDto; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; @@ -31,15 +32,17 @@ public LoginResponseDto signIn(String code) { KakaoAccountDto userInfo = kakaoService.getUserInfo(code); boolean[] isFirstLogin = { false }; Member member = findOrSaveMember(userInfo, isFirstLogin); + // 첫 로그인이 아닌 경우, 프로필의 변경사항 업데이트 + member.updateProfile(userInfo); + isFirstLogin[0] = !memberHobbyRepository.existsByMemberId(member.getId()); - Authentication authentication = setAuthentication(member.getSocialId(), "KAKAO"); + return LoginResponseDto.of(isFirstLogin[0], setAuthenticationAndGetTokens(member.getSocialId()), member); + } - LoginResponseDto loginResponseDto = isFirstLogin[0] - ? new LoginResponseDto(true) - : new LoginResponseDto(false); - loginResponseDto.setTokens(jwtProvider.generateToken(authentication)); - return loginResponseDto; + private TokenDto setAuthenticationAndGetTokens(String socialId) { + Authentication authentication = setAuthentication(socialId, "KAKAO"); + return jwtProvider.generateToken(authentication); } @Transactional diff --git a/src/main/java/com/example/SucceSS/web/dto/KakaoAccountDto.java b/src/main/java/com/example/SucceSS/web/dto/KakaoAccountDto.java index d8f77e2..56bc89d 100644 --- a/src/main/java/com/example/SucceSS/web/dto/KakaoAccountDto.java +++ b/src/main/java/com/example/SucceSS/web/dto/KakaoAccountDto.java @@ -39,6 +39,9 @@ public class Profile { //닉네임 @JsonProperty("nickname") public String nickName; + + @JsonProperty("profileImageURL") + public String profileImgUrl; } } @@ -47,6 +50,7 @@ public static Member toMemberEntity(KakaoAccountDto dto) { return Member.builder() .socialId(dto.getId().toString()) .nickname(dto.getKakaoAccount().getProfile().getNickName()) + .profileImgUrl(dto.getKakaoAccount().getProfile().getProfileImgUrl()) .userRole(Role.ROLE_USER) .build(); } diff --git a/src/main/java/com/example/SucceSS/web/dto/LoginResponseDto.java b/src/main/java/com/example/SucceSS/web/dto/LoginResponseDto.java index d60c2a7..c4d9ddb 100644 --- a/src/main/java/com/example/SucceSS/web/dto/LoginResponseDto.java +++ b/src/main/java/com/example/SucceSS/web/dto/LoginResponseDto.java @@ -1,5 +1,6 @@ package com.example.SucceSS.web.dto; +import com.example.SucceSS.domain.Member; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -8,19 +9,23 @@ @Builder @Getter @AllArgsConstructor +@NoArgsConstructor public class LoginResponseDto { private String accessToken; private String refreshToken; private String grantType; private boolean firstLogIn; + private String nickname; + private String profileImgUrl; - public LoginResponseDto(boolean firstLogIn) { - this.firstLogIn = firstLogIn; - } - - public void setTokens(TokenDto dto) { - this.accessToken = dto.getAccessToken(); - this.refreshToken = dto.getRefreshToken(); - this.grantType = dto.getGrantType(); + public static LoginResponseDto of(boolean isFirstLogin, TokenDto tokens, Member member) { + return LoginResponseDto.builder() + .firstLogIn(isFirstLogin) + .accessToken(tokens.getAccessToken()) + .refreshToken(tokens.getRefreshToken()) + .grantType(tokens.getGrantType()) + .nickname(member.getNickname()) + .profileImgUrl(member.getProfileImgUrl()) + .build(); } } From 17685d349aeced08ca3833e2d62b5a9d324f2eb0 Mon Sep 17 00:00:00 2001 From: gol2580 Date: Tue, 25 Feb 2025 21:29:49 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix/#43-jsonproperty=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20&=20firstLogin=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SucceSS/service/MemberService/AuthService.java | 12 +++++------- .../com/example/SucceSS/web/dto/KakaoAccountDto.java | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/example/SucceSS/service/MemberService/AuthService.java b/src/main/java/com/example/SucceSS/service/MemberService/AuthService.java index 54f8d57..4528272 100644 --- a/src/main/java/com/example/SucceSS/service/MemberService/AuthService.java +++ b/src/main/java/com/example/SucceSS/service/MemberService/AuthService.java @@ -30,14 +30,13 @@ public class AuthService { @Transactional public LoginResponseDto signIn(String code) { KakaoAccountDto userInfo = kakaoService.getUserInfo(code); - boolean[] isFirstLogin = { false }; - Member member = findOrSaveMember(userInfo, isFirstLogin); - // 첫 로그인이 아닌 경우, 프로필의 변경사항 업데이트 + Member member = findOrSaveMember(userInfo); + // 첫 로그인이 아닌 경우에도 프로필의 변경사항 업데이트 member.updateProfile(userInfo); - isFirstLogin[0] = !memberHobbyRepository.existsByMemberId(member.getId()); + boolean isFirstLogin = !memberHobbyRepository.existsByMemberId(member.getId()); - return LoginResponseDto.of(isFirstLogin[0], setAuthenticationAndGetTokens(member.getSocialId()), member); + return LoginResponseDto.of(isFirstLogin, setAuthenticationAndGetTokens(member.getSocialId()), member); } private TokenDto setAuthenticationAndGetTokens(String socialId) { @@ -63,10 +62,9 @@ private Authentication setAuthentication(String socialId, String password) { return authentication; } - private Member findOrSaveMember(KakaoAccountDto userInfo, boolean[] isFirstLogin) { + private Member findOrSaveMember(KakaoAccountDto userInfo) { return memberRepository.findBySocialId(userInfo.getId().toString()) .orElseGet(() -> { - isFirstLogin[0] = true; return saveMember(userInfo); }); } diff --git a/src/main/java/com/example/SucceSS/web/dto/KakaoAccountDto.java b/src/main/java/com/example/SucceSS/web/dto/KakaoAccountDto.java index 56bc89d..ddf3039 100644 --- a/src/main/java/com/example/SucceSS/web/dto/KakaoAccountDto.java +++ b/src/main/java/com/example/SucceSS/web/dto/KakaoAccountDto.java @@ -40,7 +40,7 @@ public class Profile { @JsonProperty("nickname") public String nickName; - @JsonProperty("profileImageURL") + @JsonProperty("profile_image_url") public String profileImgUrl; }