docs(dm): creatorId 진입 crash 수정을 기록한다
This commit is contained in:
@@ -443,6 +443,60 @@
|
||||
- 화면 이탈 또는 앱 background 전환 시 disconnect API가 호출된다.
|
||||
- SSE 연결 실패가 앱 crash로 이어지지 않는다.
|
||||
|
||||
### Phase 8: 크리에이터 채널 DM 진입 crash 수정
|
||||
|
||||
- [x] **Task 8.1: creatorId 기반 진입 thread crash 재현 테스트 추가**
|
||||
- Files:
|
||||
- Modify: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModelTest.kt`
|
||||
- 작업:
|
||||
- `DmChatRoomActivity.newIntentByCreatorId()`로 들어오는 흐름에 대응해 `enter(roomId = 0L, creatorId > 0L)` 테스트를 보강한다.
|
||||
- `CreateOrGetRoom` 이후 `OpenRoom` 결과가 background scheduler에서 전달되어도 `LiveData` 상태 갱신이 main thread에서 처리되어야 함을 고정한다.
|
||||
- 기존 roomId 기반 진입 테스트는 유지하고, creatorId 기반 진입만의 Rx chain thread 전환 문제를 분리해 검증한다.
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --max-workers=1`
|
||||
- Expected: 수정 전에는 background thread `MutableLiveData.setValue()` 예외 또는 main thread 보장 assertion으로 RED를 확인하고, 수정 후 PASS한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-17: `DmChatRoomViewModelTest`에 `creatorId 진입은 openRoom 결과 처리 전에 main thread로 다시 전환한다` 테스트를 추가했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --max-workers=1` 실행 결과 해당 테스트가 `DmChatRoomViewModelTest.kt:126` assertion failure로 RED가 되었고, 현재 `createRoomAndOpen()`에는 `flatMap` 이후 `OpenRoom` 결과 처리 전 main thread 재전환이 없음을 확인했다.
|
||||
|
||||
- [x] **Task 8.2: createRoomAndOpen main thread 전환 보장**
|
||||
- Files:
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModel.kt`
|
||||
- 작업:
|
||||
- `createRoomAndOpen()`의 `CreateOrGetRoom` 후 `OpenRoom` 연속 호출 흐름에서 최종 결과 처리 전에 main thread 전환이 보장되는지 점검한다.
|
||||
- `handleOpenRoomResult()`, `handleError()`, `_roomOpenedEventLiveData` 갱신, `emitContent()` 호출이 main thread에서 실행되도록 최소 변경을 적용한다.
|
||||
- `openRoom(roomId)` 단독 진입, pagination, send/retry, SSE callback scheduling, reconnect/disconnect 정리 정책은 변경하지 않는다.
|
||||
- `postValue()`로 증상을 숨기기보다 기존 ViewModel의 `setValue` 기반 동기 상태 갱신 의미를 유지할 수 있는 scheduler 위치를 우선 검토한다.
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --max-workers=1`
|
||||
- Expected: creatorId 기반 진입에서 `Cannot invoke setValue on a background thread` 예외 없이 Content 상태와 room opened event가 발행된다.
|
||||
- 검증 기록:
|
||||
- 2026-06-17: `DmChatRoomViewModel.createRoomAndOpen()`의 `flatMap` 뒤에 `observeOn(AndroidSchedulers.mainThread())`를 추가해 `OpenRoom` 결과 처리 전 main thread 전환을 보장했다. 이후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --max-workers=1`을 실행해 Task 8.1에서 RED였던 테스트를 포함한 `DmChatRoomViewModelTest` 전체 PASS를 확인했다.
|
||||
|
||||
- [x] **Task 8.3: DM 채팅 회귀 테스트와 빌드 확인**
|
||||
- Files:
|
||||
- Check: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/*Test.kt`
|
||||
- Check: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModel.kt`
|
||||
- 작업:
|
||||
- DM 채팅 ViewModel 변경이 mapper, repository, SSE parser/client, pagination 상태 테스트를 깨지 않는지 확인한다.
|
||||
- 가능하면 debug 빌드와 ktlint를 순차 실행해 Gradle cache 경합을 피한다.
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1`
|
||||
- Run: `./gradlew :app:compileDebugKotlin --max-workers=1`
|
||||
- Run: `./gradlew :app:ktlintCheck --max-workers=1`
|
||||
- Expected: 모두 PASS. 기존 `.editorconfig` `disabled_rules` deprecation warning은 실패로 보지 않는다.
|
||||
- 검증 기록:
|
||||
- 2026-06-17: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1`, `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`를 순차 실행해 모두 PASS를 확인했다. `ktlintCheck`에서는 기존 `.editorconfig`의 `disabled_rules` deprecation warning이 출력됐지만 실패는 없었다.
|
||||
|
||||
- [x] **Task 8.4: 수동 확인 항목 갱신**
|
||||
- Files:
|
||||
- Check: `DmChatRoomActivity`
|
||||
- Check: `CreatorChannelActivity`
|
||||
- 확인 항목:
|
||||
- 크리에이터 채널에서 `DM 보내기`를 터치하면 `DmChatRoomActivity`로 이동한다.
|
||||
- `creatorId` 기반 진입 후 방 생성/조회와 OpenRoom 결과 반영 중 앱이 crash 되지 않는다.
|
||||
- header 상대 정보와 초기 메시지 목록이 표시된다.
|
||||
- 채팅 탭의 기존 `roomId` 기반 DM 진입은 기존처럼 동작한다.
|
||||
|
||||
## 5. 검증 기록
|
||||
- 2026-06-10: `docs/20260610_DM_채팅화면/prd.md`를 확인해 DM 채팅방 진입, UI 제거 대상, REST API, SSE 이벤트, pagination, 전송 실패/재시도, lifecycle disconnect 요구사항을 계획에 반영했다.
|
||||
- 2026-06-10: `docs/agent-guides/work-plan-docs.md`, `docs/agent-guides/build-test-style.md`, `docs/agent-guides/code-style.md`를 확인해 신규 계획 문서 위치, phase/task 체크박스 형식, 테스트 명령 작성 방식을 확인했다.
|
||||
|
||||
Reference in New Issue
Block a user