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..4528272 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; @@ -29,17 +30,18 @@ public class AuthService { @Transactional public LoginResponseDto signIn(String code) { KakaoAccountDto userInfo = kakaoService.getUserInfo(code); - boolean[] isFirstLogin = { false }; - Member member = findOrSaveMember(userInfo, isFirstLogin); - isFirstLogin[0] = !memberHobbyRepository.existsByMemberId(member.getId()); + Member member = findOrSaveMember(userInfo); + // 첫 로그인이 아닌 경우에도 프로필의 변경사항 업데이트 + member.updateProfile(userInfo); - Authentication authentication = setAuthentication(member.getSocialId(), "KAKAO"); + boolean isFirstLogin = !memberHobbyRepository.existsByMemberId(member.getId()); - LoginResponseDto loginResponseDto = isFirstLogin[0] - ? new LoginResponseDto(true) - : new LoginResponseDto(false); - loginResponseDto.setTokens(jwtProvider.generateToken(authentication)); - return loginResponseDto; + return LoginResponseDto.of(isFirstLogin, setAuthenticationAndGetTokens(member.getSocialId()), member); + } + + private TokenDto setAuthenticationAndGetTokens(String socialId) { + Authentication authentication = setAuthentication(socialId, "KAKAO"); + return jwtProvider.generateToken(authentication); } @Transactional @@ -60,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 d8f77e2..ddf3039 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("profile_image_url") + 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(); } }