feat(creator): 팬Talk 쓰기 화면을 연결한다
This commit is contained in:
@@ -12,6 +12,13 @@
|
||||
- Figma 아이템 뷰(답글 있음): `290:9147`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=290-9147&m=dev`
|
||||
- Figma 더보기 anchored context popup: `666:36114`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=666-36114&m=dev`
|
||||
- Figma Empty: `290:9001`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=290-9001&m=dev`
|
||||
- Figma 글 입력(입력 값 없음, 키보드 있음): `290:9235`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=290-9235&m=dev`
|
||||
- Figma 글 입력(입력 값 있음, 키보드 있음): `290:9282`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=290-9282&m=dev`
|
||||
- Figma 글 입력(입력 값 있음, 키보드 없음): `290:9290`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=290-9290&m=dev`
|
||||
- Figma 입력 종료 모달: `308:19046`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=308-19046&m=dev`
|
||||
- Figma 공용 모달(버튼 1개): `567:17662`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=567-17662&m=dev`
|
||||
- Figma 공용 모달(버튼 2개): `567:17666`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=567-17666&m=dev`
|
||||
- Figma 공용 모달 dimmed 포함: `567:17712`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=567-17712&m=dev`
|
||||
|
||||
## 구현 원칙
|
||||
|
||||
@@ -23,9 +30,15 @@
|
||||
- 삭제는 기존 `ExplorerRepository.modifyCheers(cheersId:content:isActive:)`에 `isActive=false`를 전달하는 흐름을 재사용한다.
|
||||
- 더보기 버튼은 `ic_new_more`를 사용한다.
|
||||
- 내가 쓴 글이면 `수정하기`, `삭제하기`를 표시하고, 내가 쓴 글이 아니지만 내 채널이면 `삭제하기`만 표시한다.
|
||||
- 글쓰기와 수정하기 action은 신규 글쓰기 페이지 구현 전까지 no-op placeholder로 둔다.
|
||||
- 글쓰기와 수정하기 action은 이번에 작성하는 팬Talk 쓰기 페이지로 연결한다.
|
||||
- 작성 API는 기존 팬Talk API인 `ExplorerRepository.writeCheers(parentCheersId:creatorId:content:)`를 사용한다.
|
||||
- 수정 API는 기존 팬Talk API인 `ExplorerRepository.modifyCheers(cheersId:content:isActive:)`를 사용하고 `isActive`는 `nil`로 전달한다.
|
||||
- 내 채널인 경우 우측하단 글쓰기 floating button과 empty view 내부 `응원 남기기` 버튼을 모두 표시하지 않는다.
|
||||
- 우측하단 plus button은 `CreatorChannelFloatingActionMenu`의 private `floatingButton`과 동일한 UI이므로, 팬Talk 전용으로 별도 구현하지 않고 `CreatorChannel/Components` 하위 공용 icon floating button으로 추출해 재사용한다.
|
||||
- 팬Talk 쓰기 화면은 크리에이터 채널 팬Talk 탭의 우측하단 plus button, empty state의 `응원 남기기` 버튼, 내가 쓴 글의 `수정하기`에서 진입한다.
|
||||
- 팬Talk 쓰기 화면 진입 시 키보드가 올라온 상태를 기본으로 하며, 입력 값 유무에 따라 보내기 버튼 disabled/enabled 상태를 분리한다.
|
||||
- 입력 값이 있는 상태에서 취소 버튼을 터치하면 입력 종료 안내 모달을 표시한다. 입력 값이 없으면 별도 모달 없이 이전 화면으로 닫는다.
|
||||
- 공용 모달은 요청 명칭상 `V2/Components` 대상이지만, 현재 저장소 경로 관례에 맞춰 `SodaLive/Sources/V2/Component/Modal/**` 아래에 작성한다.
|
||||
|
||||
## 주요 대상 파일
|
||||
|
||||
@@ -40,12 +53,18 @@
|
||||
- `SodaLive/Sources/V2/CreatorChannel/FanTalk/Components/CreatorChannelFanTalkActionPopup.swift`
|
||||
- `SodaLive/Sources/V2/CreatorChannel/FanTalk/Components/CreatorChannelFanTalkEmptyView.swift`
|
||||
- `SodaLive/Sources/V2/CreatorChannel/Components/CreatorChannelFloatingIconButton.swift`
|
||||
- `SodaLive/Sources/V2/CreatorChannel/FanTalk/Write/CreatorChannelFanTalkWriteView.swift`
|
||||
- `SodaLive/Sources/V2/CreatorChannel/FanTalk/Write/CreatorChannelFanTalkWriteViewModel.swift`
|
||||
- `SodaLive/Sources/V2/Component/Modal/SodaV2ActionModal.swift`
|
||||
|
||||
### 수정
|
||||
- `SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift`
|
||||
- `SodaLive/Sources/V2/CreatorChannel/Components/CreatorChannelFloatingActionMenu.swift`
|
||||
- `SodaLive/Sources/V2/CreatorChannel/Home/Models/CreatorChannelHomeResponse.swift`
|
||||
- `SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelFanTalkSection.swift`
|
||||
- `SodaLive/Sources/App/AppStep.swift`
|
||||
- `SodaLive/Sources/ContentView.swift`
|
||||
- `SodaLive/Sources/Explorer/ExplorerRepository.swift`
|
||||
- `SodaLive/Sources/I18n/I18n.swift`
|
||||
- 필요 시 `SodaLive.xcodeproj/project.pbxproj`
|
||||
|
||||
@@ -191,7 +210,7 @@
|
||||
- `@StateObject`로 팬Talk 탭 ViewModel을 보유한다.
|
||||
- `selectedTabContent`에서 `.fanTalk`일 때 `CreatorChannelFanTalkTabView`를 표시한다.
|
||||
- 우측하단 글쓰기 floating button은 `selectedTab == .fanTalk`, 내 채널이 아니고 `fanTalkCount > 0`일 때만 `CreatorChannelFloatingIconButton`으로 표시한다.
|
||||
- 글쓰기 action은 신규 글쓰기 페이지 구현 전까지 no-op placeholder로 둔다.
|
||||
- 글쓰기 action은 Phase 8에서 팬Talk 쓰기 페이지 작성 모드로 연결한다.
|
||||
- 검증 기준:
|
||||
- 실행 명령: `rg "CreatorChannelFanTalkViewModel|CreatorChannelFanTalkTabView|viewModel\\.selectedTab == \\.fanTalk|CreatorChannelFloatingIconButton|showFanTalkWrite|fanTalkCount|ic_plus_no_bg" SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift`
|
||||
|
||||
@@ -215,6 +234,134 @@
|
||||
- 기대 결과: `BUILD SUCCEEDED`.
|
||||
- workspace 인식 실패 등 환경 문제가 있으면 `xcodebuild -project "SodaLive.xcodeproj" -scheme "SodaLive-dev" -configuration Debug build`를 대체 검증으로 실행하고 실패 원인을 검증 기록에 남긴다.
|
||||
|
||||
### Phase 6: 팬Talk 글 입력 문서와 공용 모달
|
||||
|
||||
- [x] **Task 6.1: 팬Talk 쓰기 Figma URL과 후속 구현 범위 기록**
|
||||
- 대상 파일:
|
||||
- 수정: `docs/20260704_크리에이터_채널_팬Talk_탭/prd.md`
|
||||
- 수정: `docs/20260704_크리에이터_채널_팬Talk_탭/plan-task.md`
|
||||
- 작업 내용:
|
||||
- 팬Talk 쓰기 화면 Figma URL `290:9235`, `290:9282`, `290:9290`을 기록한다.
|
||||
- 입력 종료 모달 Figma URL `308:19046`을 기록한다.
|
||||
- 공용 모달 Figma URL `567:17662`, `567:17666`, `567:17712`을 기록한다.
|
||||
- PRD에 팬Talk 작성/수정 진입, 입력 상태별 보내기 버튼, 입력 종료 안내 모달, 공용 모달 요구사항을 기록한다.
|
||||
- 이번 작업은 문서만 작성하고 Swift 구현은 후속 task로 남긴다.
|
||||
- 검증 기준:
|
||||
- 실행 명령: `rg "290:9235|290:9282|290:9290|308:19046|567:17662|567:17666|567:17712|SodaV2ActionModal|ExplorerRepository.writeCheers|ExplorerRepository.modifyCheers|수정 모드" docs/20260704_크리에이터_채널_팬Talk_탭/prd.md docs/20260704_크리에이터_채널_팬Talk_탭/plan-task.md`
|
||||
- 기대 결과: 팬Talk 쓰기와 공용 모달 Figma node, 공용 모달, 기존 작성/수정 API 사용 방침이 PRD와 plan-task에 기록된다.
|
||||
|
||||
- [x] **Task 6.2: V2 공용 액션 모달 구현**
|
||||
- 대상 파일:
|
||||
- 생성: `SodaLive/Sources/V2/Component/Modal/SodaV2ActionModal.swift`
|
||||
- 작업 내용:
|
||||
- Figma `567:17662`, `567:17666`, `567:17712` 기준의 공용 모달을 만든다.
|
||||
- `title`, `message`, `button1`, `button2`, `onDimmedTap`을 외부에서 주입받는다.
|
||||
- `button1`은 오른쪽, `button2`는 왼쪽에 배치한다.
|
||||
- 각 버튼은 label과 action이 모두 있을 때만 표시한다.
|
||||
- 버튼 1개만 표시될 때는 Figma `567:17662` 기준으로 단일 버튼 레이아웃을 사용한다.
|
||||
- 버튼 2개가 표시될 때는 Figma `567:17666` 기준으로 왼쪽 `button2`, 오른쪽 `button1` 순서로 배치한다.
|
||||
- dimmed는 `Color.black.opacity(0.6)`로 화면 전체를 덮고, dimmed tap 시 별도 액션 없이 모달만 닫히도록 `onDimmedTap`을 호출한다.
|
||||
- 기존 `SodaDialog`는 구 UI와 opacity 50% 규칙을 사용하므로 이번 V2 Figma 모달 구현에는 직접 수정하지 않는다.
|
||||
- 검증 기준:
|
||||
- 실행 명령: `rg "struct SodaV2ActionModal|button1|button2|onDimmedTap|Color\\.black\\.opacity\\(0\\.6\\)" SodaLive/Sources/V2/Component/Modal/SodaV2ActionModal.swift`
|
||||
- 기대 결과: 공용 모달의 주입값, 버튼 표시 조건, dimmed 규칙이 코드에서 확인된다.
|
||||
|
||||
### Phase 7: 팬Talk 쓰기 화면
|
||||
|
||||
- [x] **Task 7.1: 팬Talk 쓰기 ViewModel 구현**
|
||||
- 대상 파일:
|
||||
- 생성: `SodaLive/Sources/V2/CreatorChannel/FanTalk/Write/CreatorChannelFanTalkWriteViewModel.swift`
|
||||
- 확인/필요 시 수정: `SodaLive/Sources/Explorer/ExplorerRepository.swift`
|
||||
- 작업 내용:
|
||||
- 작성/수정 mode를 구분하는 enum을 둔다.
|
||||
- `@Published var content`를 둔다.
|
||||
- 수정 모드는 route에서 받은 `fanTalkId`와 기존 content를 필수 입력값으로 사용한다.
|
||||
- 수정 모드의 `content` 초기값은 route에서 받은 기존 content와 같아야 한다.
|
||||
- 수정 모드의 `fanTalkId`는 0보다 커야 한다.
|
||||
- `canSend`는 `content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty == false`일 때만 `true`가 되게 한다.
|
||||
- `shouldShowExitModal`은 입력 값이 있을 때 취소 버튼을 누르면 `true`로 전환한다.
|
||||
- 작성 mode의 보내기 action은 기존 `ExplorerRepository.writeCheers(parentCheersId:nil, creatorId:content:)`를 호출한다.
|
||||
- 수정 mode의 보내기 action은 기존 `ExplorerRepository.modifyCheers(cheersId:fanTalkId, content:content, isActive:nil)`를 호출한다.
|
||||
- 작성/수정 성공 시 `onSuccess`를 호출하고 화면을 닫을 수 있도록 성공 callback을 분리한다.
|
||||
- 검증 기준:
|
||||
- 실행 명령: `rg "CreatorChannelFanTalkWriteViewModel|enum .*Mode|fanTalkId|initialContent|@Published var content|canSend|trimmingCharacters|shouldShowExitModal|writeCheers|modifyCheers|isActive: nil|onSuccess" SodaLive/Sources/V2/CreatorChannel/FanTalk/Write/CreatorChannelFanTalkWriteViewModel.swift SodaLive/Sources/Explorer/ExplorerRepository.swift`
|
||||
- 기대 결과: 입력 값 기반 send 활성화 조건, 수정 모드의 `fanTalkId`/기존 content 필수 전달, 기존 작성/수정 API 사용 지점이 확인된다.
|
||||
|
||||
- [x] **Task 7.2: 팬Talk 쓰기 View 구현**
|
||||
- 대상 파일:
|
||||
- 생성: `SodaLive/Sources/V2/CreatorChannel/FanTalk/Write/CreatorChannelFanTalkWriteView.swift`
|
||||
- 수정: `SodaLive/Sources/I18n/I18n.swift`
|
||||
- 작업 내용:
|
||||
- Figma `290:9235` 기준으로 입력 값이 없을 때 보내기 버튼을 비활성화한다.
|
||||
- Figma `290:9282` 기준으로 입력 값이 있을 때 보내기 버튼을 활성화한다.
|
||||
- Figma `290:9290` 기준으로 입력 값이 있고 키보드가 내려간 상태의 레이아웃을 지원한다.
|
||||
- 화면 진입 시 `FocusState`로 입력 영역에 focus를 주어 키보드가 올라오게 한다.
|
||||
- 수정 모드 진입 시 route에서 받은 기존 content가 입력 영역에 표시되도록 ViewModel 초기값을 사용한다.
|
||||
- 배경 tap 또는 기존 keyboard helper로 키보드를 내릴 수 있게 하되, 입력 값은 유지한다.
|
||||
- 취소 버튼 tap 시 입력 값이 있으면 `SodaV2ActionModal`로 입력 종료 안내 모달을 표시하고, 입력 값이 없으면 이전 화면으로 닫는다.
|
||||
- 입력 종료 모달은 Figma `308:19046` 기준으로 표시한다.
|
||||
- 입력 종료 모달의 dimmed tap은 모달만 닫고 입력 화면은 유지한다.
|
||||
- 검증 기준:
|
||||
- 실행 명령: `rg "CreatorChannelFanTalkWriteView|FocusState|focused\\(|canSend|SodaV2ActionModal|shouldShowExitModal|initialContent|mode" SodaLive/Sources/V2/CreatorChannel/FanTalk/Write/CreatorChannelFanTalkWriteView.swift`
|
||||
- 기대 결과: 입력 상태별 UI, keyboard focus, 수정 모드 초기값, 취소 시 모달 표시가 코드에서 확인된다.
|
||||
|
||||
### Phase 8: 팬Talk 쓰기 진입 연결
|
||||
|
||||
- [x] **Task 8.1: AppStep route 추가**
|
||||
- 대상 파일:
|
||||
- 수정: `SodaLive/Sources/App/AppStep.swift`
|
||||
- 수정: `SodaLive/Sources/ContentView.swift`
|
||||
- 작업 내용:
|
||||
- `AppStep`에 팬Talk 쓰기 route를 추가한다.
|
||||
- route parameter는 최소 `creatorId`, 작성/수정 mode, 수정 대상 `fanTalkId`, 초기 content, `onSuccess`를 포함한다.
|
||||
- 작성 모드는 `fanTalkId`와 초기 content를 전달하지 않거나 비어 있는 값으로 전달한다.
|
||||
- 수정 모드는 수정 대상 `fanTalkId`와 기존 글 content를 반드시 함께 전달한다.
|
||||
- `ContentView`의 `AppStepLayerView`에서 route를 `CreatorChannelFanTalkWriteView`로 연결한다.
|
||||
- 작성/수정 성공 시 `onSuccess`를 호출해 팬Talk 첫 페이지를 재조회할 수 있게 한다.
|
||||
- 검증 기준:
|
||||
- 실행 명령: `rg "creatorChannelFanTalkWrite|CreatorChannelFanTalkWriteView|onSuccess|fanTalkId|initialContent|mode" SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift`
|
||||
- 기대 결과: route와 화면 연결이 확인된다.
|
||||
|
||||
- [x] **Task 8.2: CreatorChannel 팬Talk 탭 진입 action 연결**
|
||||
- 대상 파일:
|
||||
- 수정: `SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift`
|
||||
- 확인: `SodaLive/Sources/V2/CreatorChannel/FanTalk/CreatorChannelFanTalkTabView.swift`
|
||||
- 확인: `SodaLive/Sources/V2/CreatorChannel/FanTalk/Components/CreatorChannelFanTalkEmptyView.swift`
|
||||
- 작업 내용:
|
||||
- 크리에이터 채널 팬Talk 탭 우측하단 plus button tap 시 팬Talk 쓰기 route를 작성 모드로 이동한다.
|
||||
- empty state의 `응원 남기기` 버튼 tap 시 같은 팬Talk 쓰기 route를 작성 모드로 이동한다.
|
||||
- 내가 쓴 글의 `수정하기` tap 시 같은 팬Talk 쓰기 route를 수정 모드로 이동하고 수정 대상 `fanTalkId`, 기존 글 content를 반드시 함께 전달한다.
|
||||
- 작성/수정 전송 성공 후 `fanTalkViewModel.fetchFirstPage(creatorId:)`를 호출하도록 `onSuccess`를 전달한다.
|
||||
- 내 채널에서는 기존 규칙대로 plus button과 empty state `응원 남기기` 버튼을 표시하지 않는다.
|
||||
- 검증 기준:
|
||||
- 실행 명령: `rg "showFanTalkWriteView|showFanTalkModifyView|creatorChannelFanTalkWrite|fetchFirstPage\\(creatorId: creatorId\\)|onTapWrite|onTapEdit|응원 남기기|fanTalkId|content|initialContent" SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift SodaLive/Sources/V2/CreatorChannel/FanTalk/CreatorChannelFanTalkTabView.swift SodaLive/Sources/V2/CreatorChannel/FanTalk/Components/CreatorChannelFanTalkEmptyView.swift`
|
||||
- 기대 결과: plus button, empty state button, 수정하기가 같은 팬Talk 쓰기 route로 연결되고 수정 모드는 `fanTalkId`와 기존 글 content를 함께 전달한다.
|
||||
|
||||
### Phase 9: 팬Talk 쓰기 검증
|
||||
|
||||
- [x] **Task 9.1: 정적 검증**
|
||||
- 대상 파일:
|
||||
- 확인: `docs/20260704_크리에이터_채널_팬Talk_탭/plan-task.md`
|
||||
- 확인: `SodaLive/Sources/V2/Component/Modal`
|
||||
- 확인: `SodaLive/Sources/V2/CreatorChannel/FanTalk/Write`
|
||||
- 확인: `SodaLive/Sources/App/AppStep.swift`
|
||||
- 확인: `SodaLive/Sources/ContentView.swift`
|
||||
- 확인: `SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift`
|
||||
- 검증 기준:
|
||||
- 실행 명령: `git diff --check -- docs/20260704_크리에이터_채널_팬Talk_탭 SodaLive/Sources/V2/Component/Modal SodaLive/Sources/V2/CreatorChannel/FanTalk/Write SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift SodaLive/Sources/I18n/I18n.swift SodaLive.xcodeproj/project.pbxproj`
|
||||
- 기대 결과: 공백 오류 없이 성공한다.
|
||||
- 실행 명령: `plutil -lint SodaLive.xcodeproj/project.pbxproj`
|
||||
- 기대 결과: `OK` 출력.
|
||||
|
||||
- [x] **Task 9.2: 빌드 검증**
|
||||
- 대상 파일:
|
||||
- 확인: `SodaLive.xcworkspace`
|
||||
- 확인: `SodaLive.xcodeproj`
|
||||
- 검증 기준:
|
||||
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build`
|
||||
- 기대 결과: `BUILD SUCCEEDED`.
|
||||
- workspace 인식 실패 등 환경 문제가 있으면 `xcodebuild -project "SodaLive.xcodeproj" -scheme "SodaLive-dev" -configuration Debug build`를 대체 검증으로 실행하고 실패 원인을 검증 기록에 남긴다.
|
||||
|
||||
## 검증 기록
|
||||
|
||||
- 2026-07-04: Figma `get_design_context`와 `get_screenshot`으로 `290:9139`, `290:9145`, `290:9147`, `666:36114`, `290:9001`을 확인했다.
|
||||
@@ -226,3 +373,19 @@
|
||||
- 2026-07-04: `git diff --check -- docs/20260704_크리에이터_채널_팬Talk_탭 SodaLive/Sources/V2/CreatorChannel SodaLive/Sources/I18n/I18n.swift SodaLive.xcodeproj/project.pbxproj`를 실행해 공백 오류가 없음을 확인했다.
|
||||
- 2026-07-04: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build` 결과 `BUILD SUCCEEDED`를 확인했다.
|
||||
- 2026-07-04: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test`는 `Scheme SodaLive-dev is not currently configured for the test action.`으로 실패했다. 현재 범위에서는 새 테스트 타깃을 추가하지 않고 빌드/정적 검증으로 대체했다.
|
||||
- 2026-07-06: 사용자 요청에 따라 Swift 구현 없이 `prd.md`와 `plan-task.md`에 팬Talk 글 입력 화면 Figma URL(`290:9235`, `290:9282`, `290:9290`), 입력 종료 모달(`308:19046`), 공용 모달(`567:17662`, `567:17666`, `567:17712`)과 후속 구현 task를 추가했다.
|
||||
- 2026-07-06: `rg "290:9235|290:9282|290:9290|308:19046|567:17662|567:17666|567:17712|SodaV2ActionModal|ExplorerRepository.writeCheers" docs/20260704_크리에이터_채널_팬Talk_탭/prd.md docs/20260704_크리에이터_채널_팬Talk_탭/plan-task.md`로 Figma node, 공용 모달, 기존 작성 API 재사용 방침이 문서에 포함된 것을 확인했다.
|
||||
- 2026-07-06: `git diff --check -- docs/20260704_크리에이터_채널_팬Talk_탭/prd.md docs/20260704_크리에이터_채널_팬Talk_탭/plan-task.md` 실행 결과 출력 없이 종료되어 공백 오류가 없음을 확인했다.
|
||||
- 2026-07-06: 사용자 요청에 따라 팬Talk 작성/수정 모두 같은 쓰기 페이지에서 수행하고, 작성/수정 API는 기존 팬Talk API(`ExplorerRepository.writeCheers`, `ExplorerRepository.modifyCheers`)를 사용하도록 계획을 보완했다.
|
||||
- 2026-07-06: `rg "작성/수정|쓰기 페이지|수정 모드|작성 모드|ExplorerRepository.writeCheers|ExplorerRepository.modifyCheers|modifyCheers\\(cheersId:fanTalkId, content:content, isActive:nil\\)|creatorChannelFanTalkWrite|showFanTalkModifyView" docs/20260704_크리에이터_채널_팬Talk_탭/prd.md docs/20260704_크리에이터_채널_팬Talk_탭/plan-task.md`로 작성/수정 공용 쓰기 페이지와 기존 팬Talk API 사용 방침을 확인했다.
|
||||
- 2026-07-06: `rg -n "no-op|수정 페이지는|수정 mutation|작성용 새 API|재사용 가능 여부|불가능한 것이 확인|미결정 사항|수정하기 tap은 수정 페이지" docs/20260704_크리에이터_채널_팬Talk_탭/prd.md docs/20260704_크리에이터_채널_팬Talk_탭/plan-task.md` 실행 결과 매칭이 없어 이전 충돌 문구가 남지 않았음을 확인했다.
|
||||
- 2026-07-06: 사용자 확인에 따라 수정 모드 진입 시 수정 대상 `fanTalkId`와 기존 글 content를 반드시 함께 전달하도록 계획을 보완했다.
|
||||
- 2026-07-06: `rg '수정 모드.*fanTalkId|fanTalkId.*기존 글 content|fanTalkId.*초기 content|fanTalkId.*initialContent|기존 content.*content 초기값|수정 대상.*fanTalkId.*기존 글 content|fanTalkId.*0보다 커야' docs/20260704_크리에이터_채널_팬Talk_탭/prd.md docs/20260704_크리에이터_채널_팬Talk_탭/plan-task.md`로 수정 모드 route에 `fanTalkId`와 기존 글 content를 함께 전달한다는 조건을 확인했다.
|
||||
- 2026-07-06: Phase 6.2~8.2 구현을 완료했다. `SodaV2ActionModal`, `CreatorChannelFanTalkWriteViewModel`, `CreatorChannelFanTalkWriteView`를 추가하고 `AppStep.creatorChannelFanTalkWrite`, `ContentView` route, `CreatorChannelView`의 plus/empty/edit 진입 action을 연결했다.
|
||||
- 2026-07-06: `rg "struct SodaV2ActionModal|button1|button2|onDimmedTap|Color\.black\.opacity\(0\.6\)" SodaLive/Sources/V2/Component/Modal/SodaV2ActionModal.swift`로 V2 공용 액션 모달의 주입값, 버튼 표시 조건, dimmed 규칙을 확인했다. Figma node id는 코드 주석으로 남기지 않고 문서 기준으로만 유지했다.
|
||||
- 2026-07-06: `rg "CreatorChannelFanTalkWriteViewModel|enum .*Mode|fanTalkId|initialContent|@Published var content|canSend|trimmingCharacters|shouldShowExitModal|writeCheers|modifyCheers|isActive: nil|onSuccess" SodaLive/Sources/V2/CreatorChannel/FanTalk/Write/CreatorChannelFanTalkWriteViewModel.swift SodaLive/Sources/Explorer/ExplorerRepository.swift`로 작성/수정 mode, 입력값 검증, 기존 작성/수정 API 재사용을 확인했다.
|
||||
- 2026-07-06: `rg "CreatorChannelFanTalkWriteView|FocusState|focused\(|canSend|SodaV2ActionModal|shouldShowExitModal|initialContent|mode" SodaLive/Sources/V2/CreatorChannel/FanTalk/Write/CreatorChannelFanTalkWriteView.swift`로 쓰기 화면의 focus, send 활성화, 수정 모드 초기값, 취소 모달 연결을 확인했다.
|
||||
- 2026-07-06: `rg "creatorChannelFanTalkWrite|CreatorChannelFanTalkWriteView|onSuccess|fanTalkId|initialContent|mode" SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift`와 `rg "showFanTalkWriteView|showFanTalkModifyView|creatorChannelFanTalkWrite|fetchFirstPage\(creatorId: creatorId\)|onTapWrite|onTapEdit|응원 남기기|fanTalkId|content|initialContent" SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift SodaLive/Sources/V2/CreatorChannel/FanTalk/CreatorChannelFanTalkTabView.swift SodaLive/Sources/V2/CreatorChannel/FanTalk/Components/CreatorChannelFanTalkEmptyView.swift`로 작성/수정 route와 진입 action 연결을 확인했다.
|
||||
- 2026-07-06: `plutil -lint SodaLive.xcodeproj/project.pbxproj` 결과 `OK`를 확인했다.
|
||||
- 2026-07-06: `git diff --check -- docs/20260704_크리에이터_채널_팬Talk_탭 SodaLive/Sources/V2/Component/Modal SodaLive/Sources/V2/CreatorChannel/FanTalk/Write SodaLive/Sources/App/AppStep.swift SodaLive/Sources/ContentView.swift SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift SodaLive/Sources/V2/CreatorChannel/FanTalk/CreatorChannelFanTalkTabView.swift SodaLive/Sources/I18n/I18n.swift SodaLive.xcodeproj/project.pbxproj` 실행 결과 출력 없이 종료되어 공백 오류가 없음을 확인했다.
|
||||
- 2026-07-06: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build` 결과 `BUILD SUCCEEDED`를 확인했다. 빌드 중 `Alamofire` dependency scan warning이 출력되었으나 빌드는 성공했다.
|
||||
|
||||
Reference in New Issue
Block a user