docs(home): 팔로잉 탭 계획을 조정한다

This commit is contained in:
Yu Sung
2026-07-01 00:14:01 +09:00
parent fb7d0c799f
commit 29a54937ab

View File

@@ -207,9 +207,36 @@
- 실행 명령: `rg "onTapFollowingAll|followingList|FollowCreatorView" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift` - 실행 명령: `rg "onTapFollowingAll|followingList|FollowCreatorView" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift`
- 기대 결과: `전체` 버튼이 기존 `FollowCreatorView` 라우팅으로 연결된다. - 기대 결과: `전체` 버튼이 기존 `FollowCreatorView` 라우팅으로 연결된다.
### Phase 4: On Air 섹션 ### Phase 4: 팔로잉 탭 API 호출 연결과 데이터 상태 세팅
- [ ] **Task 4.1: On Air 섹션 생성** - [ ] **Task 4.1: 팔로잉 탭 진입 시 API 호출 연결**
- 대상 파일:
- 수정: `SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingView.swift`
- 확인: `SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingViewModel.swift`
- 작업 내용:
- `MainHomeFollowingView``@StateObject private var viewModel = MainHomeFollowingViewModel()`를 추가한다.
- 최초 `onAppear`에서 `viewModel.hasLoaded == false`일 때만 `viewModel.fetchFollowing()`을 호출한다.
- 이 단계에서는 새 섹션 UI를 추가하지 않고, 이미 존재하는 팔로잉 크리에이터 섹션에 `viewModel.response?.followingCreators ?? []`를 연결한다.
- API 성공 시 `MainHomeFollowingViewModel.response``HomeFollowingTabResponse`가 세팅되는 흐름을 먼저 확보한다.
- `isLoginRequired`, `message`, `hasLoaded`, `isLoading` 상태는 ViewModel의 기존 세팅 흐름을 사용한다.
- 검증 기준:
- 실행 명령: `rg "StateObject private var viewModel = MainHomeFollowingViewModel|onAppear|hasLoaded|fetchFollowing|response\\?\\.followingCreators|isLoading|message|MainPlaceholderTabView" SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingView.swift SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingViewModel.swift`
- 기대 결과: 팔로잉 탭 진입 시 ViewModel이 생성되고, 최초 진입에서 API 호출 후 응답 데이터가 기존 크리에이터 섹션에 전달되는 흐름이 확인된다.
- [ ] **Task 4.2: 팔로잉 API 호출 빌드 검증**
- 대상 파일:
- 확인: `SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingView.swift`
- 확인: `SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingViewModel.swift`
- 작업 내용:
- 추가 섹션 UI 구현 전에 API 호출 연결만으로 컴파일이 깨지지 않는지 확인한다.
- 로그인 guard가 유지되어 비로그인 상태에서는 팔로잉 탭 전환과 API 호출이 발생하지 않는지 코드 흐름을 확인한다.
- 검증 기준:
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`
- 기대 결과: 빌드가 성공하고, `MainHomeView`의 팔로잉 탭 로그인 guard가 유지된다.
### Phase 5: On Air 섹션
- [ ] **Task 5.1: On Air 섹션 생성**
- 대상 파일: - 대상 파일:
- 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingLiveSection.swift` - 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingLiveSection.swift`
- 작업 내용: - 작업 내용:
@@ -223,9 +250,9 @@
- 실행 명령: `rg "struct MainHomeFollowingLiveSection|onAirTitle|FollowingLiveResponse|startedAtUtc|DateParser|onTapLive|DownsampledKFImage|ScrollView\\(\\.horizontal" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingLiveSection.swift` - 실행 명령: `rg "struct MainHomeFollowingLiveSection|onAirTitle|FollowingLiveResponse|startedAtUtc|DateParser|onTapLive|DownsampledKFImage|ScrollView\\(\\.horizontal" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingLiveSection.swift`
- 기대 결과: On Air 섹션의 데이터 표시와 live tap callback이 확인된다. - 기대 결과: On Air 섹션의 데이터 표시와 live tap callback이 확인된다.
### Phase 5: 최근 대화 섹션 ### Phase 6: 최근 대화 섹션
- [ ] **Task 5.1: 최근 대화 섹션 생성** - [ ] **Task 6.1: 최근 대화 섹션 생성**
- 대상 파일: - 대상 파일:
- 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingChatSection.swift` - 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingChatSection.swift`
- 확인: `SodaLive/Sources/Chat/Talk/TalkView.swift` - 확인: `SodaLive/Sources/Chat/Talk/TalkView.swift`
@@ -241,7 +268,7 @@
- 실행 명령: `rg "struct MainHomeFollowingChatSection|recentChatTitle|ChatRoomListItemResponse|targetImageUrl|targetName|lastMessage|lastMessageAt|onTapChatRoom" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingChatSection.swift` - 실행 명령: `rg "struct MainHomeFollowingChatSection|recentChatTitle|ChatRoomListItemResponse|targetImageUrl|targetName|lastMessage|lastMessageAt|onTapChatRoom" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingChatSection.swift`
- 기대 결과: 최근 대화 item 필드와 채팅방 tap callback이 확인된다. - 기대 결과: 최근 대화 item 필드와 채팅방 tap callback이 확인된다.
- [ ] **Task 5.2: 채팅방 진입 연결** - [ ] **Task 6.2: 채팅방 진입 연결**
- 대상 파일: - 대상 파일:
- 수정: `SodaLive/Sources/V2/Main/Home/MainHomeView.swift` - 수정: `SodaLive/Sources/V2/Main/Home/MainHomeView.swift`
- 수정: `SodaLive/Sources/V2/Main/MainView.swift` - 수정: `SodaLive/Sources/V2/Main/MainView.swift`
@@ -255,9 +282,9 @@
- 실행 명령: `rg "onTapChatRoom|chatRoom\\(id:|ChatRoomView" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift` - 실행 명령: `rg "onTapChatRoom|chatRoom\\(id:|ChatRoomView" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift`
- 기대 결과: 최근 대화 item tap이 기존 채팅방 화면으로 연결된다. - 기대 결과: 최근 대화 item tap이 기존 채팅방 화면으로 연결된다.
### Phase 6: 이달의 스케줄 섹션 ### Phase 7: 이달의 스케줄 섹션
- [ ] **Task 6.1: 이달의 스케줄 섹션 생성** - [ ] **Task 7.1: 이달의 스케줄 섹션 생성**
- 대상 파일: - 대상 파일:
- 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingScheduleSection.swift` - 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingScheduleSection.swift`
- 작업 내용: - 작업 내용:
@@ -273,7 +300,7 @@
- 실행 명령: `rg "struct MainHomeFollowingScheduleSection|monthlyScheduleTitle|FollowingScheduleResponse|scheduledAtUtc|isOnAir|Color.soda400|CreatorActivityType|onTapSchedule|오늘" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingScheduleSection.swift` - 실행 명령: `rg "struct MainHomeFollowingScheduleSection|monthlyScheduleTitle|FollowingScheduleResponse|scheduledAtUtc|isOnAir|Color.soda400|CreatorActivityType|onTapSchedule|오늘" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingScheduleSection.swift`
- 기대 결과: 스케줄 카드 표시, On Air 강조, schedule tap callback이 확인된다. - 기대 결과: 스케줄 카드 표시, On Air 강조, schedule tap callback이 확인된다.
- [ ] **Task 6.2: 스케줄 상세 진입 연결** - [ ] **Task 7.2: 스케줄 상세 진입 연결**
- 대상 파일: - 대상 파일:
- 수정: `SodaLive/Sources/V2/Main/Home/MainHomeView.swift` - 수정: `SodaLive/Sources/V2/Main/Home/MainHomeView.swift`
- 수정: `SodaLive/Sources/V2/Main/MainView.swift` - 수정: `SodaLive/Sources/V2/Main/MainView.swift`
@@ -286,9 +313,9 @@
- 실행 명령: `rg "onTapFollowingSchedule|CreatorActivityType|contentDetail|creatorCommunityAll|enterLiveRoom" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift` - 실행 명령: `rg "onTapFollowingSchedule|CreatorActivityType|contentDetail|creatorCommunityAll|enterLiveRoom" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift`
- 기대 결과: schedule type별 routing 분기가 확인된다. - 기대 결과: schedule type별 routing 분기가 확인된다.
### Phase 7: 최근 소식 랭킹 카드 ### Phase 8: 최근 소식 랭킹 카드
- [ ] **Task 7.1: 최근 소식 랭킹 카드 생성** - [ ] **Task 8.1: 최근 소식 랭킹 카드 생성**
- 대상 파일: - 대상 파일:
- 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingRankingNewsCard.swift` - 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingRankingNewsCard.swift`
- 작업 내용: - 작업 내용:
@@ -302,9 +329,9 @@
- 실행 명령: `rg "struct MainHomeFollowingRankingNewsCard|FollowingCreatorRankingNewsResponse|FollowingContentRankingNewsResponse|rank|Color.soda400|onTapCreator|onTapContent|24:5717" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingRankingNewsCard.swift` - 실행 명령: `rg "struct MainHomeFollowingRankingNewsCard|FollowingCreatorRankingNewsResponse|FollowingContentRankingNewsResponse|rank|Color.soda400|onTapCreator|onTapContent|24:5717" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingRankingNewsCard.swift`
- 기대 결과: 랭킹 최근 소식 카드와 타입별 tap callback이 확인된다. - 기대 결과: 랭킹 최근 소식 카드와 타입별 tap callback이 확인된다.
### Phase 8: 최근 소식 커뮤니티 카드 ### Phase 9: 최근 소식 커뮤니티 카드
- [ ] **Task 8.1: 최근 소식 커뮤니티 카드 조립** - [ ] **Task 9.1: 최근 소식 커뮤니티 카드 조립**
- 대상 파일: - 대상 파일:
- 생성 또는 수정: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingNewsSection.swift` - 생성 또는 수정: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingNewsSection.swift`
- 확인: `SodaLive/Sources/V2/Component/Card/CommunityPostCard.swift` - 확인: `SodaLive/Sources/V2/Component/Card/CommunityPostCard.swift`
@@ -317,7 +344,7 @@
- 실행 명령: `rg "COMMUNITY_POST|communityPost|CommunityPostCard|postId|creatorProfileImage|likeCount|commentCount|audioUrl: nil|price: 0|existOrdered: true" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingNewsSection.swift` - 실행 명령: `rg "COMMUNITY_POST|communityPost|CommunityPostCard|postId|creatorProfileImage|likeCount|commentCount|audioUrl: nil|price: 0|existOrdered: true" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingNewsSection.swift`
- 기대 결과: community post payload가 기존 community card 표시값으로 매핑된다. - 기대 결과: community post payload가 기존 community card 표시값으로 매핑된다.
- [ ] **Task 8.2: 커뮤니티 게시글 tap 라우팅 제약 처리** - [ ] **Task 9.2: 커뮤니티 게시글 tap 라우팅 제약 처리**
- 대상 파일: - 대상 파일:
- 확인: `SodaLive/Sources/App/AppState.swift` - 확인: `SodaLive/Sources/App/AppState.swift`
- 확인: `SodaLive/Sources/App/AppStep.swift` - 확인: `SodaLive/Sources/App/AppStep.swift`
@@ -332,9 +359,9 @@
- 실행 명령: `rg "setPendingCommunityCommentDeepLink|consumePendingCommunityCommentPostId|creatorCommunityAll|case chatRoom|case creatorCommunity" SodaLive/Sources/App/AppState.swift SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift SodaLive/Sources/Explorer/Profile/CreatorCommunity/All/CreatorCommunityAllView.swift` - 실행 명령: `rg "setPendingCommunityCommentDeepLink|consumePendingCommunityCommentPostId|creatorCommunityAll|case chatRoom|case creatorCommunity" SodaLive/Sources/App/AppState.swift SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift SodaLive/Sources/Explorer/Profile/CreatorCommunity/All/CreatorCommunityAllView.swift`
- 기대 결과: 기존 커뮤니티 직접 진입 경로가 `creatorId`를 요구하는지 확인된다. - 기대 결과: 기존 커뮤니티 직접 진입 경로가 `creatorId`를 요구하는지 확인된다.
### Phase 9: 최근 소식 오디오/화보 콘텐츠 카드 ### Phase 10: 최근 소식 오디오/화보 콘텐츠 카드
- [ ] **Task 9.1: 최근 소식 콘텐츠 카드 생성** - [ ] **Task 10.1: 최근 소식 콘텐츠 카드 생성**
- 대상 파일: - 대상 파일:
- 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingContentNewsCard.swift` - 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingContentNewsCard.swift`
- 작업 내용: - 작업 내용:
@@ -348,15 +375,14 @@
- 실행 명령: `rg "struct MainHomeFollowingContentNewsCard|audioTag|photoTag|contentImageUrl|creatorProfileImageUrl|creatorNickname|visibleFromAtUtc|onTapContent|aspectRatio" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingContentNewsCard.swift` - 실행 명령: `rg "struct MainHomeFollowingContentNewsCard|audioTag|photoTag|contentImageUrl|creatorProfileImageUrl|creatorNickname|visibleFromAtUtc|onTapContent|aspectRatio" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingContentNewsCard.swift`
- 기대 결과: 오디오/화보 variant와 콘텐츠 상세 callback이 확인된다. - 기대 결과: 오디오/화보 variant와 콘텐츠 상세 callback이 확인된다.
### Phase 10: 화면 조립, empty/error 상태, 상세 진입 callback 연결 ### Phase 11: 화면 조립, empty/error 상태, 상세 진입 callback 연결
- [ ] **Task 10.1: 팔로잉 탭 화면 조립** - [ ] **Task 11.1: 팔로잉 탭 화면 조립**
- 대상 파일: - 대상 파일:
- 수정: `SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingView.swift` - 수정: `SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingView.swift`
- 작업 내용: - 작업 내용:
- placeholder를 제거한다. - placeholder를 제거한다.
- `@StateObject private var viewModel = MainHomeFollowingViewModel()`를 사용한다. - Phase 4에서 연결한 `MainHomeFollowingViewModel`과 최초 `fetchFollowing()` 호출 흐름은 유지한다.
- 최초 `onAppear`에서 `hasLoaded == false`일 때만 `fetchFollowing()`을 호출한다.
- loading, loginRequired, message, content 상태를 분기한다. - loading, loginRequired, message, content 상태를 분기한다.
- content 상태에서는 PRD 순서대로 팔로잉 크리에이터, On Air, 최근 대화, 이달의 스케줄, 최근 소식을 조립한다. - content 상태에서는 PRD 순서대로 팔로잉 크리에이터, On Air, 최근 대화, 이달의 스케줄, 최근 소식을 조립한다.
- 각 섹션 배열이 비어 있으면 해당 섹션을 렌더링하지 않는다. - 각 섹션 배열이 비어 있으면 해당 섹션을 렌더링하지 않는다.
@@ -366,7 +392,7 @@
- 실행 명령: `rg "MainHomeFollowingViewModel|fetchFollowing|MainHomeFollowingCreatorSection|MainHomeFollowingLiveSection|MainHomeFollowingChatSection|MainHomeFollowingScheduleSection|MainHomeFollowingNewsSection|MainHomeFollowingEmptyStateView|emptyStateMessage|loadFailedMessage|MainPlaceholderTabView" SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingView.swift` - 실행 명령: `rg "MainHomeFollowingViewModel|fetchFollowing|MainHomeFollowingCreatorSection|MainHomeFollowingLiveSection|MainHomeFollowingChatSection|MainHomeFollowingScheduleSection|MainHomeFollowingNewsSection|MainHomeFollowingEmptyStateView|emptyStateMessage|loadFailedMessage|MainPlaceholderTabView" SodaLive/Sources/V2/Main/Home/Following/MainHomeFollowingView.swift`
- 기대 결과: `MainPlaceholderTabView`는 검색되지 않고, 팔로잉 화면 상태 분기와 섹션 조립이 확인된다. - 기대 결과: `MainPlaceholderTabView`는 검색되지 않고, 팔로잉 화면 상태 분기와 섹션 조립이 확인된다.
- [ ] **Task 10.2: empty/login required view 생성** - [ ] **Task 11.2: empty/login required view 생성**
- 대상 파일: - 대상 파일:
- 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingEmptyStateView.swift` - 생성: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingEmptyStateView.swift`
- 작업 내용: - 작업 내용:
@@ -377,7 +403,7 @@
- 실행 명령: `rg "struct MainHomeFollowingEmptyStateView|message|loginButtonTitle|Button|Color.black|frame\\(maxWidth: \\.infinity" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingEmptyStateView.swift` - 실행 명령: `rg "struct MainHomeFollowingEmptyStateView|message|loginButtonTitle|Button|Color.black|frame\\(maxWidth: \\.infinity" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingEmptyStateView.swift`
- 기대 결과: empty/API 실패/로그인 필요 상태 공용 안내 view가 확인된다. - 기대 결과: empty/API 실패/로그인 필요 상태 공용 안내 view가 확인된다.
- [ ] **Task 10.3: 최근 소식 섹션 조립** - [ ] **Task 11.3: 최근 소식 섹션 조립**
- 대상 파일: - 대상 파일:
- 생성 또는 수정: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingNewsSection.swift` - 생성 또는 수정: `SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingNewsSection.swift`
- 작업 내용: - 작업 내용:
@@ -393,7 +419,7 @@
- 실행 명령: `rg "struct MainHomeFollowingNewsSection|recentNewsTitle|visibleFromAtUtc|creatorRanking|contentRanking|communityPost|audioContent|photoContent|unknown|MainHomeFollowingRankingNewsCard|MainHomeFollowingContentNewsCard|CommunityPostCard" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingNewsSection.swift` - 실행 명령: `rg "struct MainHomeFollowingNewsSection|recentNewsTitle|visibleFromAtUtc|creatorRanking|contentRanking|communityPost|audioContent|photoContent|unknown|MainHomeFollowingRankingNewsCard|MainHomeFollowingContentNewsCard|CommunityPostCard" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingNewsSection.swift`
- 기대 결과: 최근 소식 타입별 payload 분기와 unknown 숨김 정책이 확인된다. - 기대 결과: 최근 소식 타입별 payload 분기와 unknown 숨김 정책이 확인된다.
- [ ] **Task 10.4: 상세 진입 callback 연결** - [ ] **Task 11.4: 상세 진입 callback 연결**
- 대상 파일: - 대상 파일:
- 수정: `SodaLive/Sources/V2/Main/Home/MainHomeView.swift` - 수정: `SodaLive/Sources/V2/Main/Home/MainHomeView.swift`
- 수정: `SodaLive/Sources/V2/Main/MainView.swift` - 수정: `SodaLive/Sources/V2/Main/MainView.swift`
@@ -404,14 +430,14 @@
- content는 기존 `handleRecommendationContentTap`을 재사용한다. - content는 기존 `handleRecommendationContentTap`을 재사용한다.
- chat room은 `.chatRoom(id:)`로 이동한다. - chat room은 `.chatRoom(id:)`로 이동한다.
- following all은 `.followingList`로 이동한다. - following all은 `.followingList`로 이동한다.
- community post는 Task 8.2 제약에 따라 postId 단독 route가 없으면 상세 진입을 연결하지 않는다. - community post는 Task 9.2 제약에 따라 postId 단독 route가 없으면 상세 진입을 연결하지 않는다.
- 검증 기준: - 검증 기준:
- 실행 명령: `rg "onTapFollowingAll|onTapChatRoom|onTapFollowingSchedule|handleRecommendationLiveTap|handleRecommendationCreatorTap|handleRecommendationContentTap|followingList|chatRoom\\(id:" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift` - 실행 명령: `rg "onTapFollowingAll|onTapChatRoom|onTapFollowingSchedule|handleRecommendationLiveTap|handleRecommendationCreatorTap|handleRecommendationContentTap|followingList|chatRoom\\(id:" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift`
- 기대 결과: 팔로잉 탭의 상세 진입 callback이 기존 MainView guard/route에 연결된다. - 기대 결과: 팔로잉 탭의 상세 진입 callback이 기존 MainView guard/route에 연결된다.
### Phase 11: 프로젝트 등록, 빌드, UI 검증 ### Phase 12: 프로젝트 등록, 빌드, UI 검증
- [ ] **Task 11.1: Xcode 프로젝트 포함 여부 확인** - [ ] **Task 12.1: Xcode 프로젝트 포함 여부 확인**
- 대상 파일: - 대상 파일:
- 확인: `SodaLive.xcodeproj/project.pbxproj` - 확인: `SodaLive.xcodeproj/project.pbxproj`
- 확인: `SodaLive/Sources/V2/Main/Home/Following/**` - 확인: `SodaLive/Sources/V2/Main/Home/Following/**`
@@ -422,7 +448,7 @@
- 실행 명령: `rg "HomeFollowingTabResponse|MainHomeFollowingApi|MainHomeFollowingRepository|MainHomeFollowingViewModel|MainHomeFollowingCreatorSection|MainHomeFollowingNewsSection|MainHomeFollowingEmptyStateView" SodaLive.xcodeproj/project.pbxproj SodaLive/Sources/V2/Main/Home/Following` - 실행 명령: `rg "HomeFollowingTabResponse|MainHomeFollowingApi|MainHomeFollowingRepository|MainHomeFollowingViewModel|MainHomeFollowingCreatorSection|MainHomeFollowingNewsSection|MainHomeFollowingEmptyStateView" SodaLive.xcodeproj/project.pbxproj SodaLive/Sources/V2/Main/Home/Following`
- 기대 결과: 신규 파일 참조와 소스 파일이 확인된다. - 기대 결과: 신규 파일 참조와 소스 파일이 확인된다.
- [ ] **Task 11.2: 정적 검색 검증** - [ ] **Task 12.2: 정적 검색 검증**
- 대상 파일: - 대상 파일:
- 확인: `SodaLive/Sources/V2/Main/Home/Following/**` - 확인: `SodaLive/Sources/V2/Main/Home/Following/**`
- 확인: `SodaLive/Sources/V2/Main/Home/MainHomeView.swift` - 확인: `SodaLive/Sources/V2/Main/Home/MainHomeView.swift`
@@ -436,7 +462,7 @@
- 실행 명령: `rg "/api/v2/home/following|HomeFollowingTabResponse|ChatRoomListItemResponse|CreatorActivityType|FollowingNewsType|visibleFromAtUtc|팔로잉 소식이 아직 없어요|팔로잉 정보를 불러오지 못했습니다|Color.soda400|followingList|chatRoom\\(id:" SodaLive/Sources/V2/Main/Home/Following SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift SodaLive/Sources/I18n/I18n.swift` - 실행 명령: `rg "/api/v2/home/following|HomeFollowingTabResponse|ChatRoomListItemResponse|CreatorActivityType|FollowingNewsType|visibleFromAtUtc|팔로잉 소식이 아직 없어요|팔로잉 정보를 불러오지 못했습니다|Color.soda400|followingList|chatRoom\\(id:" SodaLive/Sources/V2/Main/Home/Following SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift SodaLive/Sources/I18n/I18n.swift`
- 기대 결과: API, 모델, 문구, 라우팅, 색상 요구사항이 확인된다. - 기대 결과: API, 모델, 문구, 라우팅, 색상 요구사항이 확인된다.
- [ ] **Task 11.3: 빌드 검증** - [ ] **Task 12.3: 빌드 검증**
- 대상 파일: - 대상 파일:
- 확인: `SodaLive.xcworkspace` - 확인: `SodaLive.xcworkspace`
- 작업 내용: - 작업 내용:
@@ -445,7 +471,7 @@
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build` - 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`
- 기대 결과: 빌드가 성공한다. - 기대 결과: 빌드가 성공한다.
- [ ] **Task 11.4: 수동 UI 검증** - [ ] **Task 12.4: 수동 UI 검증**
- 대상 파일: - 대상 파일:
- 확인: `SodaLive/Sources/V2/Main/Home/Following/**` - 확인: `SodaLive/Sources/V2/Main/Home/Following/**`
- 확인: Figma `24:5682` - 확인: Figma `24:5682`
@@ -476,3 +502,4 @@
- 2026-06-30: `rg "struct MainHomeFollowingCreatorSection|ScrollView\(\.horizontal|followingCreators|onTapCreator|onTapAll|allButtonTitle|Color\.soda400|padding\(\.horizontal, 16\)" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingCreatorSection.swift`로 팔로잉 크리에이터 섹션 요구사항을 확인했다. - 2026-06-30: `rg "struct MainHomeFollowingCreatorSection|ScrollView\(\.horizontal|followingCreators|onTapCreator|onTapAll|allButtonTitle|Color\.soda400|padding\(\.horizontal, 16\)" SodaLive/Sources/V2/Main/Home/Following/Components/MainHomeFollowingCreatorSection.swift`로 팔로잉 크리에이터 섹션 요구사항을 확인했다.
- 2026-06-30: `rg "onTapFollowingAll|followingList|FollowCreatorView" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift``전체` 버튼 라우팅 연결을 확인했다. - 2026-06-30: `rg "onTapFollowingAll|followingList|FollowCreatorView" SodaLive/Sources/V2/Main/Home/MainHomeView.swift SodaLive/Sources/V2/Main/MainView.swift SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift``전체` 버튼 라우팅 연결을 확인했다.
- 2026-06-30: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`를 재실행해 Phase 3 신규 Swift 파일 target 등록과 컴파일 성공을 확인했다. - 2026-06-30: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`를 재실행해 Phase 3 신규 Swift 파일 target 등록과 컴파일 성공을 확인했다.
- 2026-07-01: 완료된 Phase 3은 유지하고, Phase 4를 팔로잉 탭 API 호출 연결과 데이터 상태 세팅 단계로 변경했다. 이후 섹션 UI 작업은 Phase 5부터 순차 진행하도록 Phase/Task 번호를 재정렬했다.