diff --git a/src/main/java/com/linkode/api_server/controller/LoginController.java b/src/main/java/com/linkode/api_server/controller/LoginController.java index 49b76568..276431cf 100644 --- a/src/main/java/com/linkode/api_server/controller/LoginController.java +++ b/src/main/java/com/linkode/api_server/controller/LoginController.java @@ -2,6 +2,7 @@ import com.linkode.api_server.common.exception.MemberException; import com.linkode.api_server.common.response.BaseResponse; +import com.linkode.api_server.domain.Member; import com.linkode.api_server.dto.member.LoginResponse; import com.linkode.api_server.service.LoginService; import lombok.RequiredArgsConstructor; @@ -27,11 +28,13 @@ public class LoginController { @GetMapping("/oauth2/redirect") public BaseResponse githubLogin(@RequestParam String code) { log.info("[MemberController.githubLogin]"); - try { - return new BaseResponse<>(loginService.githubLogin(code)); - }catch (NoSuchElementException e){ - return new BaseResponse<>(NOT_FOUND_MEMBER,null); - } +// try { +// return new BaseResponse<>(loginService.githubLogin(code)); +// }catch (MemberEx e){ +// return new BaseResponse<>(NOT_FOUND_MEMBER,null); +// } + return new BaseResponse<>(loginService.githubLogin(code)); + } } \ No newline at end of file diff --git a/src/main/java/com/linkode/api_server/dto/member/LoginResponse.java b/src/main/java/com/linkode/api_server/dto/member/LoginResponse.java index ffbd46d5..7894511e 100644 --- a/src/main/java/com/linkode/api_server/dto/member/LoginResponse.java +++ b/src/main/java/com/linkode/api_server/dto/member/LoginResponse.java @@ -1,6 +1,7 @@ package com.linkode.api_server.dto.member; import com.linkode.api_server.domain.Member; +import jakarta.annotation.Nullable; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -13,6 +14,7 @@ public class LoginResponse { /** * 깃허브 소셜로그인 */ + private boolean memberStatus; private Long memberId; private String githubId; private String accessToken; @@ -45,13 +47,14 @@ public static class Studyroom { } // 정적 팩토리 메서드 - public static LoginResponse of(Member member, String accessToken, String refreshToken, List studyroomList) { + public static LoginResponse of(boolean memberStatus, @Nullable Member member, String githubId,String accessToken, String refreshToken, List studyroomList) { return LoginResponse.builder() - .memberId(member.getMemberId()) - .githubId(member.getGithubId()) + .memberStatus(memberStatus) + .memberId(member != null ? member.getMemberId() : null) + .githubId(githubId) .accessToken(accessToken) .refreshToken(refreshToken) - .profile(Profile.from(member)) + .profile(member != null ? Profile.from(member) : null) .studyroomList(studyroomList) .build(); } diff --git a/src/main/java/com/linkode/api_server/service/LoginService.java b/src/main/java/com/linkode/api_server/service/LoginService.java index 39ccfc72..a765da3c 100644 --- a/src/main/java/com/linkode/api_server/service/LoginService.java +++ b/src/main/java/com/linkode/api_server/service/LoginService.java @@ -48,30 +48,45 @@ public class LoginService { public LoginResponse githubLogin(String code){ log.info("[LoginService.githubLogin]"); String githubId = getUserInfo(getAccessToken(code)); //깃허브 서버와 통신해서 유저 정보 받아오기 + String jwtAccessToken = null; + String jwtRefreshToken = null; + List studyroom = null; + boolean memberStatus = false; + + try { + Member member = memberRepository.findByGithubIdAndStatus(githubId, BaseStatus.ACTIVE) + .orElseThrow(()-> new MemberException(NOT_FOUND_MEMBER)); + log.info("[깃허브 아이디로 member 찾기]"); + + if(member!=null){ + memberStatus = true; + jwtAccessToken = jwtProvider.createAccessToken(member); + log.info("[엑세스토큰 발급~]"); + jwtRefreshToken = jwtProvider.createRefreshToken(member); + log.info("[리프레시토큰 발급~]"); + // 레디스 저장 + tokenService.storeToken(jwtRefreshToken, githubId); + LoginResponse.Profile.from(member); + studyroom = memberstudyroomRepository.findByMemberIdAndStatus(member.getMemberId(), BaseStatus.ACTIVE) + .orElseThrow(()->new MemberStudyroomException(NOT_FOUND_MEMBER_STUDYROOM)) + .stream() + .map(ms -> new LoginResponse.Studyroom(ms.getStudyroom().getStudyroomId(), ms.getStudyroom().getStudyroomProfile())) + .collect(Collectors.toList()); + log.info("[studyroom stream 으로 찾아서 반환하기]"); + + } + return LoginResponse.of( + memberStatus, + member, + githubId, + jwtAccessToken, + jwtRefreshToken, + studyroom + ); + }catch (MemberException e){ + return LoginResponse.of(memberStatus, null, githubId, null,null,null); + } - Optional member = memberRepository.findByGithubIdAndStatus(githubId, BaseStatus.ACTIVE); - log.info("[깃허브 아이디로 member 찾기]"); - - String jwtAccessToken = jwtProvider.createAccessToken(member.get()); - log.info("[엑세스토큰 발급~]"); - String jwtRefreshToken = jwtProvider.createRefreshToken(member.get()); - log.info("[리프레시토큰 발급~]"); - // 레디스 저장 - tokenService.storeToken(jwtRefreshToken, githubId); - LoginResponse.Profile.from(member.get()); - List studyroom = memberstudyroomRepository.findByMemberIdAndStatus(member.get().getMemberId(), BaseStatus.ACTIVE) - .orElseThrow(()->new MemberStudyroomException(NOT_FOUND_MEMBER_STUDYROOM)) - .stream() - .map(ms -> new LoginResponse.Studyroom(ms.getStudyroom().getStudyroomId(), ms.getStudyroom().getStudyroomProfile())) - .collect(Collectors.toList()); - log.info("[studyroom stream 으로 찾아서 반환하기]"); - - return LoginResponse.of( - member.get(), - jwtAccessToken, - jwtRefreshToken, - studyroom - ); } /**