Feat: 내 정보 조회 API에 로그인 수단 및 수단별 이메일 추가 - #564
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (6)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. Walkthrough회원별 OAuth 제공자와 이메일 자격 증명 여부를 조회해 Changes회원 로그인 수단 조회
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Feature Sequence Diagram(s)sequenceDiagram
participant MemberQueryService
participant MemberOAuthService
participant MemberOAuthRepository
participant MemberOAuthJpaRepository
participant MemberCredentialPersistencePort
participant MemberDetailsResponse
MemberQueryService->>MemberOAuthService: findProvidersByMemberId(memberId)
MemberOAuthService->>MemberOAuthRepository: findAllByMemberId(memberId)
MemberOAuthRepository->>MemberOAuthJpaRepository: findAllByMemberId(memberId.value)
MemberOAuthJpaRepository-->>MemberOAuthRepository: OAuth 연결 목록
MemberOAuthRepository-->>MemberOAuthService: MemberOAuth 목록
MemberOAuthService-->>MemberQueryService: 중복 제거 및 정렬된 제공자 목록
MemberQueryService->>MemberCredentialPersistencePort: 이메일 자격 증명 존재 여부 조회
MemberQueryService->>MemberDetailsResponse: 로그인 수단 목록 전달
Suggested reviewers: Merge Risk: ⚪ Minimal · up to The login-method response matches the currently supported OAuth providers and email credentials. No actionable merge-blocking risk was established for this change. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
hwistlezz
left a comment
There was a problem hiding this comment.
연휴인데 고생 많으셧습니다~!
이번 PR에 대해서는 수정 의견은 없습니다!
다만, 다른 얘기이긴 한데,,
기존 이메일 로그인 흐름도 보다가 궁금한 부분이 있어서 여쭤봅니다.!
OAtuh로만 회원가입한 (비밀번호가 없는) 회원에 대해, 같은 이메일 주소와 새로운 비밀번호를 통해 비밀번호를 등록하고 로그인할 수 있는 걸로 이해했어요. (회원 상태와 탈퇴 여부만 검사하고, 요청자가 계정 주인인지는 확인하는 로직은 없는 것 같아요.!)
이메일 주소를 아는 다른 사람(악의적인 사용자)이 해당 계정에 접근할 수 있을 것 같은데, 제가 놓친 본인 확인 절차가 있을까요??
@hwistlezz |
Summary
내 정보 조회(
GET /v1/members/me) 응답에loginMethods필드를 추가해요. 로그인 수단과 수단별 이메일을 함께 내려줘요.소셜 로그인 이메일은 지금까지 저장하지 않았기 때문에
member_oauth에email컬럼을 추가하고, 로그인할 때마다 제공자 이메일로 갱신해요.Tasks
db/pending/2609241927_member_oauth_email.sqlmember_oauth.email VARCHAR(255) NULL추가members.signup_email로 채움 (탈퇴로 익명화된 회원 제외)MemberOAuth/MemberOAuthEntity에email추가MemberOAuthPersistencePort.updateEmail추가 (값이 다를 때만 UPDATE)KakaoAuthService,AppleAuthService,MemberLoginService(웹 OAuth, 카카오 네이티브)MemberDetailsResponse.loginMethods: List<LoginMethod(type, email)>member_oauth행마다 하나 (제공자 선언 순서로 정렬)EMAIL:member_credentials에 자격 증명이 있으면 마지막에 추가ETC
애플리케이션이
ddl-auto: validate라서 마이그레이션을 먼저 적용한 뒤 배포해야 해요. 컬럼이 없으면 서버가 뜨지 않아요. 롤백할 때는 반대로 애플리케이션을 먼저 내리고 컬럼을 DROP해요.기존 데이터 채우기 전제
소셜 계정은
signup_email과 제공자 이메일이 같은 회원에게만 연동되기 때문에(findAllBySignupEmail로 매칭), 연동 시점의 이메일은signup_email과 같아요. 연동 뒤에 제공자 쪽 이메일이 바뀐 경우는 다음 로그인 때 갱신돼요.검증
/me응답은 실제 호출로 확인하지 않았어요관련 PR
#562와 마찬가지로
db/pending을 사용해요. 파일이 겹치지 않고 선행 스크립트도 없어서 어느 PR이 먼저 머지돼도 괜찮아요.🤖 Generated with Claude Code