-
Notifications
You must be signed in to change notification settings - Fork 1
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
feat: 마이페이지 계정정보 조회 API 추가 #672
Conversation
Walkthrough변경 사항은 Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Controller
participant Service
participant Client
participant GitHub API
User->>Controller: /getAccountInfo 요청
Controller->>Service: getAccountInfo() 호출
Service->>Client: getGithubHandle(oauthId) 호출
Client->>GitHub API: GET 요청
GitHub API-->>Client: 사용자 정보 응답
Client-->>Service: GitHub 핸들 반환
Service-->>Controller: MemberAccountInfoResponse 반환
Controller-->>User: 계정 정보 응답
Assessment against linked issues
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configuration File (
|
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (8)
- src/main/java/com/gdschongik/gdsc/domain/member/api/CommonMemberController.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/member/application/CommonMemberService.java (3 hunks)
- src/main/java/com/gdschongik/gdsc/domain/member/dto/response/MemberAccountInfoResponse.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/common/constant/GithubConstant.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/infra/github/GithubHandleRequest.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/infra/github/GithubHttpConnector.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/infra/github/client/GithubClient.java (2 hunks)
Additional comments not posted (8)
src/main/java/com/gdschongik/gdsc/global/common/constant/GithubConstant.java (1)
7-7
: 새로운 GitHub API URL 상수 추가 확인
GITHUB_USER_API_URL
상수의 추가는 GitHub API와의 상호작용을 위한 URL 구조를 제공하여 클래스의 기능을 향상시킵니다. 이 변경은 적절해 보입니다.src/main/java/com/gdschongik/gdsc/domain/member/dto/response/MemberAccountInfoResponse.java (1)
1-9
: Java Record를 사용한 DTO 설계 확인
MemberAccountInfoResponse
를 Java Record로 정의한 것은 간결하고 명확한 데이터 전달 객체를 제공하는 좋은 선택입니다. 또한of
메서드를 통해 객체 생성을 캡슐화한 점도 좋습니다.src/main/java/com/gdschongik/gdsc/infra/github/GithubHttpConnector.java (1)
1-15
: GitHubConnector 인터페이스 구현 확인
GithubHttpConnector
클래스가GitHubConnector
인터페이스를 구현하고 있으며,send
메서드를 기본 구현에 위임하는 방식은 간단하고 명확합니다. 이 구현은 인터페이스 계약에 잘 맞습니다.src/main/java/com/gdschongik/gdsc/domain/member/api/CommonMemberController.java (1)
39-44
: 새로운 API 엔드포인트 추가 검토
getAccountInfo()
메서드는 계정 정보를 조회하는 새로운 엔드포인트로 잘 구현되었습니다.@Operation
어노테이션을 사용하여 API 문서화를 지원합니다. 서비스 레이어와의 통합도 적절합니다.src/main/java/com/gdschongik/gdsc/domain/member/application/CommonMemberService.java (1)
90-95
: 계정 정보 조회 메서드 검토
getAccountInfo()
메서드는 현재 멤버 정보를 가져오고 GitHub 핸들을 조회하여 응답을 생성합니다.@Transactional(readOnly = true)
어노테이션을 사용하여 데이터베이스 상태를 변경하지 않도록 보장합니다. 새로운 의존성(MemberUtil
,GithubClient
)과의 통합이 잘 이루어졌습니다.src/main/java/com/gdschongik/gdsc/infra/github/client/GithubClient.java (2)
31-31
: 의존성 주입이 잘 되어 있습니다.
GithubHttpConnector
필드가 생성자 주입을 통해 올바르게 설정되었습니다.
41-49
: 메서드 구현이 적절합니다.
getGithubHandle
메서드는GithubHttpConnector
를 사용하여 요청을 보내고 응답을 처리합니다. 예외 처리가 적절하게 이루어졌습니다.메서드 사용을 확인하십시오. 다음 스크립트를 실행하여 코드베이스에서 메서드 사용을 확인하세요:
Verification successful
getGithubHandle
메서드 사용이 확인되었습니다.
CommonMemberService
클래스에서getGithubHandle
메서드를 사용하여 현재 회원의 GitHub 핸들을 가져오고 있습니다. 메서드 사용이 적절하게 이루어졌습니다.
CommonMemberService.java
에서getGithubHandle
메서드가 호출됩니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify all method calls to `getGithubHandle`. # Test: Search for the method usage. Expect: Occurrences of the method call. rg --type java -A 5 $'getGithubHandle'Length of output: 1401
src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1)
170-170
: 새로운 오류 코드가 적절하게 추가되었습니다.
GITHUB_USER_NOT_FOUND
오류 코드는 깃허브 유저가 존재하지 않는 경우에 대한 명확한 메시지를 제공합니다.
src/main/java/com/gdschongik/gdsc/infra/github/GithubHandleRequest.java
Outdated
Show resolved
Hide resolved
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
import org.springframework.stereotype.Component; | ||
|
||
@Component | ||
public class GithubHttpConnector implements GitHubConnector { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
라이브러리 잠깐 살펴봤는데요, GithubConnector를 implements 하여 DI하지 않고, 그냥 GithubClient 에서 바로 DEFAULT 구현체로 초기화해버리면 될 것 같은데 어떻게 생각하시나요?
private final GitHubConnector githubConnector = GitHubConnector.DEFAULT;
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그렇네요.
특별한 구현 없으니 이게 더 간단하고 깔끔할 것 같네요.
반영할게요!
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (2)
- src/main/java/com/gdschongik/gdsc/infra/github/GithubUserRequest.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/infra/github/client/GithubClient.java (2 hunks)
Additional comments not posted (11)
src/main/java/com/gdschongik/gdsc/infra/github/GithubUserRequest.java (9)
15-16
: 클래스 이름 명확화 필요
GithubUserRequest
클래스는 GitHub 사용자 정보를 요청하는 역할을 합니다. 클래스 이름이 명확하게 역할을 나타내고 있어 적절합니다.
18-18
: OAuth ID 주입 방식 확인
oauthId
는 최종 필드로 선언되어 있으며, 생성자를 통해 주입됩니다. 이는 불변성을 보장하여 안전한 설계입니다.
20-23
: HTTP 메서드 하드코딩
method()
메서드는 HTTP 메서드를 하드코딩하여 반환합니다. 이 부분은 변경 가능성이 낮아 보이므로 현재 상태로도 괜찮습니다.
26-27
: 헤더 반환 메서드
allHeaders()
메서드는 빈 헤더 맵을 반환합니다. 필요에 따라 헤더를 추가할 수 있도록 설계되어 있습니다.
31-33
: 헤더 개별 반환 메서드
header(String s)
메서드는 빈 문자열을 반환합니다. 특정 헤더를 반환해야 하는 경우 구현이 필요합니다.
36-37
: 콘텐츠 타입 반환 메서드
contentType()
메서드는 빈 문자열을 반환합니다. 콘텐츠 타입이 필요할 경우 구현이 필요합니다.
41-43
: 본문 반환 메서드
body()
메서드는 null을 반환합니다. 본문이 필요한 경우 구현이 필요합니다.
45-52
: URL 생성 및 예외 처리
url()
메서드는 URL을 생성하고MalformedURLException
을 처리합니다. 예외 발생 시CustomException
을 던지도록 구현되어 있어 안전합니다.
55-57
: 본문 존재 여부 반환 메서드
hasBody()
메서드는 false를 반환합니다. 본문이 필요한 경우 true로 변경해야 합니다.src/main/java/com/gdschongik/gdsc/infra/github/client/GithubClient.java (2)
31-31
: GitHubConnector 필드 초기화
gitHubConnector
필드는 기본 인스턴스로 초기화됩니다. 이는 의존성을 명확히 하며, 테스트 시 모킹이 필요할 수 있습니다.
41-49
: GitHub 사용자 핸들 가져오기 메서드 구현
getGithubHandle
메서드는oauthId
를 통해 GitHub 사용자 핸들을 가져옵니다.IOException
을 처리하여CustomException
을 던지는 부분이 적절합니다. JSON 파싱을 위해ObjectMapper
를 사용한 것도 적절합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
더 깔끔하게... 처리할 수 있는 방법이 없을까요?
뭔가 코드가 너무 많아서 차라리 RestClient로 직접 쏘는게 맞나 싶기도 하고...
일단 어푸드립니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
맞아요.. RestClient로 하면 훨씬 깔끔하긴 할 것 같기도.. |
🌱 관련 이슈
📌 작업 내용 및 특이사항
org.kohsuke.github
에서깃허브 핸들 -> id조회
는 제공하는데 그 반대는 지원하지 않습니다.대신 GitHubConnector 함수형 인터페이스가 있어서 이를 이용했습니다.
📝 참고사항
📚 기타
Summary by CodeRabbit
신규 기능
버그 수정
문서화
기타