From 39dd003b4e274b853f9ca495e420a4fd83e4a430 Mon Sep 17 00:00:00 2001 From: klaus Date: Sat, 27 Jun 2026 02:35:45 +0900 Subject: [PATCH] =?UTF-8?q?docs(main):=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EA=B0=80=EB=93=9C=20=EC=A7=84=ED=96=89=EC=9D=84=20=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan-task.md | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/docs/20260627_메인_홈_콘텐츠_페이지_로그인_가드/plan-task.md b/docs/20260627_메인_홈_콘텐츠_페이지_로그인_가드/plan-task.md index 49f12333..8df36100 100644 --- a/docs/20260627_메인_홈_콘텐츠_페이지_로그인_가드/plan-task.md +++ b/docs/20260627_메인_홈_콘텐츠_페이지_로그인_가드/plan-task.md @@ -21,7 +21,7 @@ - 지정된 source test, 컴파일, ktlint, diff whitespace 검증이 통과한다. ### Phase 1: 현재 이동 지점과 기존 로그인 진입점 확인 -- [ ] **Task 1.1: `HomeMainFragment` 이동 지점 확인** +- [x] **Task 1.1: `HomeMainFragment` 이동 지점 확인** - 파일: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt` - 확인 대상: - `openHomeOnAirLive` @@ -36,7 +36,7 @@ - 검증 기록: - 2026-06-27: source 확인 결과 위 함수들이 실제 화면 이동 지점이다. `onLiveClick`, `onFollowingSectionMoreClick`, `onFollowingLiveClick`, `onFollowingScheduleClick`, `onFollowingNewsClick`은 현재 `Unit` 또는 이동 없음이므로 이번 가드 적용 대상이 아니다. -- [ ] **Task 1.2: `ContentMainFragment` 이동 지점 확인** +- [x] **Task 1.2: `ContentMainFragment` 이동 지점 확인** - 파일: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt` - 확인 대상: - `onBannerClick` @@ -47,14 +47,14 @@ - 검증 기록: - 2026-06-27: source 확인 결과 `onBannerClick`, `openAudioContentDetail`, `openSeriesDetail`이 실제 화면 이동 지점이다. 랭킹/카드 클릭은 이 함수들로 위임되므로 최종 이동 함수에 가드를 적용하면 된다. -- [ ] **Task 1.3: 기존 로그인 진입점 확인** +- [x] **Task 1.3: 기존 로그인 진입점 확인** - 파일: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2Activity.kt` - 확인 대상: `MainV2Activity.showLoginActivity()` - 검증 기준: `SharedPreferenceManager.token.isBlank()` 조건에서 `LoginActivity`를 시작하는 기존 메서드를 재사용할 수 있다. - 검증 기록: - 2026-06-27: `MainV2Activity.showLoginActivity()`는 token blank 조건에서 `LoginActivity`를 시작한다. helper는 이 메서드를 호출하는 방식으로 계획한다. -- [ ] **Task 1.4: 기존 성인 콘텐츠/본인인증 정책 확인** +- [x] **Task 1.4: 기존 성인 콘텐츠/본인인증 정책 확인** - 파일: - `app/src/main/java/kr/co/vividnext/sodalive/common/AdultContentVisibilityPolicy.kt` - `app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt` @@ -71,7 +71,7 @@ - 2026-06-27: `countryCode` 기본값은 `KR`이고, blank country도 `KR`로 취급하는 기존 패턴을 확인했다. `ContentSettingsActivity`는 `Constants.EXTRA_SHOW_SENSITIVE_CONTENT_GUIDE`가 `true`이면 민감 콘텐츠 안내 Toast를 표시한다. ### Phase 2: v2 메인 전용 이동 guard helper 추가 -- [ ] **Task 2.1: helper source test 추가** +- [x] **Task 2.1: helper source test 추가** - 파일: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/MainV2LoginGuardSourceTest.kt` - 검증 기준: - helper가 `SharedPreferenceManager.token.isBlank()`를 사용한다. @@ -88,8 +88,10 @@ ./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.MainV2LoginGuardSourceTest" ``` - 기대 결과: 구현 전에는 helper 파일 부재로 실패한다. + - 검증 기록: + - 2026-06-27: `MainV2LoginGuardSourceTest`를 추가하고 구현 전 실행했다. `MainV2LoginGuard.kt` 파일 부재로 실패해 RED 상태를 확인했다. -- [ ] **Task 2.2: helper 구현** +- [x] **Task 2.2: helper 구현** - 파일: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2LoginGuard.kt` - 구현 방향: ```kotlin @@ -123,8 +125,12 @@ } ``` - 검증 기준: Task 2.1 source test가 통과한다. + - 검증 기록: + - 2026-06-27: `MainV2LoginGuard.kt`를 추가했다. token blank 시 `MainV2Activity.showLoginActivity()`, 성인 콘텐츠 요청 시 한국/본인인증 확인, `SodaDialog` 본인인증 안내, `Auth.auth`, `ContentSettingsActivity` 민감 콘텐츠 안내 extra, 최종 `onAllowed()` 흐름을 포함한다. + - 2026-06-27: 리뷰 지적에 따라 `Auth.auth` 완료 콜백에서 `BootpayResponse`를 파싱하고 `AuthVerifyRequest`를 생성해 `MyPageViewModel.authVerify()`로 서버 검증 후 `SplashActivity`를 재시작하는 기존 인증 완료 후처리를 추가했다. + - 2026-06-27: 코드 리뷰에서 `Auth.auth` 성공 콜백 후처리 누락을 지적받았고, 같은 Phase 2 범위에서 기존 패턴과 동일한 서버 본인인증 검증 및 상태 갱신 흐름으로 보완했다. -- [ ] **Task 2.3: 한국 접속 미인증 사용자 처리 방식 확정** +- [x] **Task 2.3: 한국 접속 미인증 사용자 처리 방식 확정** - 파일: - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2LoginGuard.kt` - 필요 시 v2 main 하위 신규 auth guide helper @@ -215,3 +221,6 @@ - 2026-06-27: 사용자 요청에 따라 이번 작업은 문서 생성만 수행한다. source/test/helper 구현 및 Gradle 검증은 아직 실행하지 않는다. - 2026-06-27: 사용자 요청에 따라 본인인증/성인 콘텐츠 설정 가드를 문서 범위에 추가했다. 구현은 아직 수행하지 않는다. - 2026-06-27: 한국 접속 미인증 사용자 본인인증 안내 흐름은 v2 helper에서 기존 `SodaDialog` + `Auth.auth` 패턴을 직접 재사용하는 것으로 확정했다. +- 2026-06-27: Phase 1/2 진행 결과 `MainV2LoginGuardSourceTest`와 `MainV2LoginGuard`를 추가했다. 구현 전 단일 source test는 helper 파일 부재로 실패했고, 구현 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.MainV2LoginGuardSourceTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`가 통과했다. +- 2026-06-27: 리뷰 지적에 따라 빈 `Auth.auth` 콜백을 금지하는 source test를 추가한 뒤 RED를 확인했고, 서버 검증/상태 갱신 후처리 구현 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.MainV2LoginGuardSourceTest"`와 `./gradlew :app:compileDebugKotlin`이 통과했다. +- 2026-06-27: Phase 1/2 코드 리뷰 지적을 반영한 뒤 검증을 재수행했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.MainV2LoginGuardSourceTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`는 모두 통과했다.