Skip to content

feat(afternote): 수신자 본인확인 이메일 인증 stub → 실 API 전환 (closes 407)#409

Open
1hyok wants to merge 3 commits into
feat/209from
feat/407
Open

feat(afternote): 수신자 본인확인 이메일 인증 stub → 실 API 전환 (closes 407)#409
1hyok wants to merge 3 commits into
feat/209from
feat/407

Conversation

@1hyok

@1hyok 1hyok commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📌𝘐𝘴𝘴𝘶𝘦𝘴

Closes #407 — feat(afternote): 수신자 본인확인 이메일 인증 stub → 실 API(receiver-auth/email) 전환

📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯

  • ReceiverAuthApiServicePOST receiver-auth/email/auth-code·POST receiver-auth/email/verify 추가, DTO·toDomain 매퍼·도메인 모델(ReceiverEmailAuthResult) 신설 (c76f3ad)
  • ReceiverAuthRepositorysendEmailAuthCode/verifyEmailAuthCode 추가, ApiException → 도메인 예외 ReceiverEmailAuthException 변환 (서버 message·code 보존)
  • IdentityVerificationViewModel 의 stub 의존을 실 Repository 로 교체, 에러 표시를 ErrorPayload(서버 message 우선 + 리소스 폴백) 로 격상, IdentityEmailVerificationStub 삭제 + "백엔드 미구현" 전제 KDoc 일괄 갱신 (a0d3194)
  • 예외 매핑을 try/catch 인라인으로 통일 (기존 submitDeliveryVerification 포함), 회귀 테스트 3종(매퍼·응답 계약·예외 매핑) 추가, KDoc 보강 (1076f60)

📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵

화면 구성 변경 없음 (stub → 실 API 동작 전환). 에뮬레이터 실서버 E2E 검증 완료 — 미등록 이메일 404/1901 서버 문구 스낵바, 인증번호 불일치 문구 스낵바, Gmail 실수신 인증번호로 verify 성공 → 마스터 키 화면 전환.

💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴

1hyok added 3 commits June 11, 2026 09:19
- 임시 UI 확인용으로 사용되던 `IdentityEmailVerificationStub`을 제거하고 실제 백엔드 연동을 위한 인프라 구축
- `ReceiverAuthRepository`에 이메일 인증 코드 발송(`sendEmailAuthCode`) 및 검증(`verifyEmailAuthCode`) 메서드 추가
- 도메인 계층에 인증 결과를 담는 `ReceiverEmailAuthResult` 모델 및 전용 예외 클래스 `ReceiverEmailAuthException` 정의
- 서버 통신을 위한 Request/Response DTO 정의 및 도메인 모델 매핑 로직(`toDomain`) 구현
- API 응답 JSON 디코딩 계약 검증 및 `ApiException`의 도메인 예외 변환을 확인하는 단위 테스트 추가
- 인증번호 발송 실패 시 사용자에게 노출할 에러 메시지 리소스(`strings.xml`) 추가
- `ReceiverAuthApiService`에 이메일 인증번호 발송(`sendEmailAuthCode`) 및 검증(`verifyEmailAuthCode`) API 정의 추가
- `ReceiverAuthRepositoryImpl`에 이메일 인증 기능 구현 및 `ApiException`을 도메인 예외로 변환하는 에러 처리 구조 개선 (runCatching 내 try-catch 패턴 적용)
- `BaseResponse` 및 `ApiException`에 서버 응답 스키마 처리 정책과 예외 메시지 전달 방식에 대한 상세 설명(KDoc) 추가
- `IdentityVerificationIntroScreen`에서 이메일 인증 단계가 스텁(Stub) 대신 실제 API를 호출하도록 관련 주석 업데이트
- `ReceiverAuthApiService`에서 `X-Auth-Code` 헤더가 필요한 엔드포인트와 제외되는 엔드포인트에 대한 설명 보완
- `IdentityEmailVerificationStub`을 제거하고 `ReceiverAuthRepository`를 통한 실제 이메일 인증 API(인증번호 발송 및 검증) 연동
- UI 상태 내 `errorMessageRes`(Int)를 `ErrorPayload`(Sealed Interface)로 변경하여 서버 전달 메시지와 로컬 리소스 폴백을 함께 지원
- `IdentityVerificationViewModel`에서 API 호출 결과에 따른 에러 처리 로직(`toErrorPayload`) 구현
- 인증번호 발송 및 검증 요청 시 입력값(이메일, 코드)에 대한 `trim()` 처리 추가
- `IdentityVerificationEmailScreen`에서 `ErrorPayload` 타입에 따라 스낵바 메시지를 구성하도록 로직 수정
- `BaseResponse` 및 관련 UI 상태 클래스의 KDoc 주석 보완 및 정리

@koongmai koongmai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#409 이메일 인증 성공 후 accessCode를 저장하지 않아 이후 receiver-auth API 인증 헤더가 비어 있을 수 있음
IdentityVerificationViewModel.kt:89-93에서 verifyEmailAuthCode() 성공 시 markVerified()만 하고 응답의 accessCode는 사용하지 않습니다. 그런데 기존 구조는 ReceiverAuthCodeDataSource에 저장된 값이 ReceiverAuthInterceptor.kt:25-33에서 X-Auth-Code로 붙고, 마스터키 화면은 MasterKeyViewModel.kt:56-60에서 검증 성공 후 saveAuthCode(trimmed)를 호출합니다.
즉 이메일 인증이 마스터키와 같은 accessCode를 내려주는 흐름이라면, 여기서도 저장해야 이후 서류 업로드/수신자 API가 정상 인증됩니다. 아니면 markVerified()로 마스터키 단계 진입 조건만 켜는 현재 동작이 설계상 맞는지 명확히 해야 합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature 기능추

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants