Files
sodalive-android/docs/20260803_내_채널_팔로워_목록_연결/plan-task.md

9.8 KiB

내 채널 팔로워 목록 연결 Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:test-driven-development to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 내 채널 상단 팔로워 n명 터치 시 기존 레거시 팔로워 목록 화면으로 이동한다.

Architecture: CreatorChannelActivity가 이미 헤더와 현재 creatorId를 소유하므로 Activity 내부에서 클릭 리스너를 추가한다. 목적지는 레거시 UserFollowerListActivity이며 기존 호출 방식처럼 Constants.EXTRA_USER_ID만 전달한다.

Tech Stack: Android Kotlin, ViewBinding, JUnit source test, Gradle :app:testDebugUnitTest, :app:assembleDebug.


문서 항목 내용
상태 구현 완료
작성일 2026-08-03
요구사항 기준 docs/20260803_내_채널_팔로워_목록_연결/prd.md
API 기준 기존 레거시 UserFollowerListActivity / ExplorerApi.getFollowerList
현재 Phase Phase 1
현재 활성 Goal 없음

목표

내 채널 소유자가 v2 크리에이터 채널의 팔로워 n명을 눌러 기존 레거시 팔로워 목록을 확인한다.

현재 상태

Phase 상태 완료 Task 활성/다음 Goal 차단 또는 남은 조건
1 완료 1/1 없음 직접 Activity 기동은 not exported 보안 정책상 adb에서 차단됨

범위

포함

  • CreatorChannelActivitytvFollowerCount 클릭 연결.
  • 기존 UserFollowerListActivityConstants.EXTRA_USER_ID = creatorId 전달.
  • owner 전용 동작과 0명 허용 계약을 source test로 고정.

제외

  • 신규 v2 팔로워/팔로잉 목록 화면.
  • 레거시 UserFollowerListActivity 및 API 수정.
  • 타인 채널의 팔로워 수 클릭 동작.
  • 팔로워/팔로잉 문구 변경.

기술적 제약

  • 레거시 코드는 직접 수정하지 않는다.
  • 새 dependency, router, helper abstraction을 추가하지 않는다.
  • 기존 CreatorChannelActivitySourceTest의 source-test 패턴을 따른다.
  • production 구현은 RED 확인 후 진행한다.

Phase 1

Phase 결과: 내 채널 헤더의 팔로워 n명이 레거시 팔로워 목록으로 이동한다.

선행조건: PRD 승인 완료.

Phase 완료 조건: P1-T1P1-GATE 완료, 검증 기록 누적.

구현 항목

Task 1.1 내 채널 팔로워 수 클릭 연결

Goal 실행 P1-T1: CreatorChannelActivity에서 owner의 tvFollowerCount 클릭을 UserFollowerListActivity로 연결한다.

  • 시작 조건: FOLLOWER-LINK-001~003 확정.
  • 완료 증거: RED/GREEN source test, debug build, 수동 검증 기록.
  • 범위 밖: 레거시 화면 수정, 신규 v2 화면 작성, 타인 채널 동작 추가.

Files:

  • Modify: app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt
  • Modify: app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt

Interfaces:

  • Consumes: creatorId: Long, currentHeader?.isOwner, Constants.EXTRA_USER_ID.

  • Produces: Intent(this, UserFollowerListActivity::class.java).putExtra(Constants.EXTRA_USER_ID, creatorId) 실행 경로.

  • RED: CreatorChannelActivitySourceTest내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다 테스트를 추가한다.

@Test
fun `내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다`() {
    val source = projectFile(
        "app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt"
    ).readText()
    val clickSource = sourceSection(
        source = source,
        startMarker = "private fun onFollowerCountClicked()",
        endMarker = "private fun bindHeader"
    )

    assertTrue(source.contains("import kr.co.vividnext.sodalive.explorer.profile.follow.UserFollowerListActivity"))
    assertTrue(source.contains("binding.tvFollowerCount.setOnClickListener"))
    assertTrue(clickSource.contains("if (currentHeader?.isOwner != true) return"))
    assertTrue(clickSource.contains("Intent(this, UserFollowerListActivity::class.java)"))
    assertTrue(clickSource.contains("putExtra(Constants.EXTRA_USER_ID, creatorId)"))
    assertFalse(clickSource.contains("followerCount > 0"))
    assertFalse(source.contains("FollowingCreatorActivity::class.java"))
}
  • RED 확인: focused test를 실행해 start marker not found: private fun onFollowerCountClicked() 실패를 확인한다.
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest.내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다"
  • GREEN: CreatorChannelActivity에 import, click listener, 최소 handler를 추가한다.
import kr.co.vividnext.sodalive.explorer.profile.follow.UserFollowerListActivity

binding.tvFollowerCount.setOnClickListener { onFollowerCountClicked() }

private fun onFollowerCountClicked() {
    if (currentHeader?.isOwner != true) return
    startActivity(
        Intent(this, UserFollowerListActivity::class.java)
            .putExtra(Constants.EXTRA_USER_ID, creatorId)
    )
}
  • GREEN 확인: 같은 focused test가 성공하는지 확인한다.
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest.내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다"
  • REFACTOR: 불필요한 변경이 없는지 확인하고 아래 직접 영향 회귀를 실행한다.
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"
./gradlew :app:assembleDebug

검증 방법

Phase 1 Gate

Goal 실행 P1-GATE: 문서와 코드가 요구사항을 충족하는지 최종 판정한다.

./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"
./gradlew :app:assembleDebug

Expected: test/build 모두 exit code 0. CreatorChannelActivityUserFollowerListActivity만 참조하고 FollowingCreatorActivity를 참조하지 않는다.

수동 검증:

  • Android 실행 환경에서 내 채널 진입 후 팔로워 n명 터치 시 UserFollowerListActivity가 열리는지 확인한다.
  • 실행 환경이 없으면 사용 가능한 명령과 부재 사유를 Progress에 기록한다.

실행 순서와 의존성

순서 Goal 선행조건 병행 가능 차단 시 다음 행동
1 P1-T1 PRD 승인 아니요 테스트 실패 원인을 해당 Task에서 수정
2 P1-GATE P1-T1 완료 아니요 실패 소유 Task에 회귀 수정 기록 추가
P1-T1 -> P1-GATE

변경 금지 항목

  • 레거시 UserFollowerListActivity를 수정하지 않는다.
  • 새 화면, dependency, router abstraction을 만들지 않는다.
  • test를 삭제, skip, 완화하지 않는다.
  • 민감정보를 로그, Toast, 문서에 기록하지 않는다.

Progress

기존 기록을 삭제하거나 덮어쓰지 않고 실제 실행 결과를 누적한다.

P1-T1 1차 실행 — 2026-08-03

  • 상태: 완료
  • 무엇을: CreatorChannelActivitytvFollowerCount 클릭을 owner 전용 UserFollowerListActivity 진입으로 연결하고 source test를 추가했다.
  • 왜: FOLLOWER-LINK-001~003 구현 기준 충족.
  • 어떻게:
    • ./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest.내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다" — RED 실패, CreatorChannelActivitySourceTest.kt:2378에서 onFollowerCountClicked() source marker 부재로 실패.
    • 같은 focused 명령 재실행 — GREEN 성공, exit code 0.
    • ./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest" — 성공, exit code 0.
    • ./gradlew :app:testDebugUnitTest — 성공, exit code 0.
    • ./gradlew :app:assembleDebug — 성공, exit code 0.
    • adb install -r "app/build/outputs/apk/debug/app-debug.apk" — 성공.
    • adb shell am start -W -n kr.co.vividnext.sodalive.debug/kr.co.vividnext.sodalive.explorer.profile.follow.UserFollowerListActivity --el extra_user_id 1not exported 보안 정책으로 직접 Activity 기동 차단.
    • adb shell monkey -p kr.co.vividnext.sodalive.debug 1 — debug 앱 실행 이벤트 주입 성공.
  • 남은 항목: 로그인된 내 채널 실제 클릭 검증은 인증 상태가 있는 수동 QA 환경에서 확인 필요.
  • 다음 행동: 없음.

Decision Log

날짜 ID 상태 결정 근거 영향 Goal/문서
2026-08-03 DEC-001 확정 UserFollowerListActivity를 목적지로 사용한다. 내 채널을 팔로우하는 사용자 목록 요구. P1-T1, prd.md#15-decision-log

발견된 문제

ID 심각도 상태 발견 내용 영향 Goal 처리 계획
없음 Low 보류 현재 발견된 범위 내 문제 없음 없음 없음

Verification Log

  • 2026-08-03: RED/GREEN source test, 직접 영향 source test, 전체 debug unit test, debug build가 모두 성공했다. 연결된 Android 기기에는 APK 설치와 앱 실행 이벤트 주입까지 확인했으나, 레거시 Activity 직접 기동은 not exported 보안 정책으로 차단되어 로그인된 내 채널에서의 실제 클릭은 별도 QA 환경에서 확인해야 한다.
  • 2026-08-03: 리뷰 게이트를 수행했고 reviews/phase1-follower-list-link-review.md에 확정 발견 사항 없음으로 기록했다.