docs(dm): Phase 12 검증 기록을 갱신한다
This commit is contained in:
@@ -755,7 +755,7 @@
|
||||
|
||||
### Phase 12: 푸시 진입과 제거 endpoint 회귀 검증
|
||||
|
||||
- [ ] **Task 12.1: FCM payload에 chat_type 전달 추가**
|
||||
- [x] **Task 12.1: FCM payload에 chat_type 전달 추가**
|
||||
- Files:
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/fcm/SodaFirebaseMessagingService.kt`
|
||||
- Test: `app/src/test/java/kr/co/vividnext/sodalive/fcm/SodaFirebaseMessagingServiceSourceTest.kt`
|
||||
@@ -766,8 +766,11 @@
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.fcm.SodaFirebaseMessagingServiceSourceTest" --max-workers=1`
|
||||
- Expected: `chat_type`과 `room_id`가 notification intent extras에 포함되는 source test가 PASS.
|
||||
- 검증 기록:
|
||||
- 2026-06-18: `SodaFirebaseMessagingServiceSourceTest`를 추가해 `chat_type`, `room_id`, `message_id`, `deep_link_value`가 `Constants.EXTRA_DATA` bundle에 보존되는지 source test로 고정했다. 수정 전 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.fcm.SodaFirebaseMessagingServiceSourceTest" --max-workers=1` 실행 결과 `SodaFirebaseMessagingServiceSourceTest.kt:15` assertion failure로 RED를 확인했다. 이후 `SodaFirebaseMessagingService.sendNotification()`의 non-URL extras bundle에 `messageData["chat_type"]` 복사를 추가했고 같은 테스트 PASS를 확인했다.
|
||||
- 2026-06-18: Phase 12 코드 리뷰에서 FCM payload에 `deepLink`가 함께 있는 경우 기존 구현이 `deep_link`만 extra bundle에 보존하고 `chat_type`/`room_id`를 누락해 USER_CREATOR DM 라우팅이 일반 딥링크 흐름으로 빠질 수 있음을 확인했다. `SodaFirebaseMessagingServiceSourceTest`에 deepLink payload에서도 `chat_type`/`room_id`를 보존하는 회귀 테스트를 추가했고, 수정 전 `SodaFirebaseMessagingServiceSourceTest.kt:32` assertion failure RED를 확인했다. 이후 deepLink URL 분기에도 `messageData["chat_type"]`, `messageData["room_id"]` 복사를 추가했고 같은 테스트 PASS를 확인했다.
|
||||
|
||||
- [ ] **Task 12.2: USER_CREATOR 푸시를 DM 채팅방으로 라우팅**
|
||||
- [x] **Task 12.2: USER_CREATOR 푸시를 DM 채팅방으로 라우팅**
|
||||
- Files:
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.kt`
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2Activity.kt`
|
||||
@@ -781,8 +784,12 @@
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.main.DeepLinkActivitySourceTest" --tests "kr.co.vividnext.sodalive.v2.main.MainV2ActivitySourceTest" --max-workers=1`
|
||||
- Expected: USER_CREATOR push routing, invalid room fallback, 기존 deep link 유지 테스트가 PASS.
|
||||
- 검증 기록:
|
||||
- 2026-06-18: `DeepLinkActivitySourceTest`와 `MainV2ActivitySourceTest`를 추가해 `chat_type == "USER_CREATOR"`와 valid `room_id` 조합이 `DmChatRoomActivity.newIntentByRoomId()`로 라우팅되는지 source test로 고정했다. 수정 전 실행 결과 두 테스트가 각각 `DeepLinkActivitySourceTest.kt:13`, `MainV2ActivitySourceTest.kt:13` assertion failure로 RED가 됨을 확인했다. 이후 `DeepLinkActivity`는 `Constants.EXTRA_DATA`에서 `chat_type`을 복사하고 foreground 라우팅에서 USER_CREATOR DM 분기를 기존 live room fallback보다 먼저 처리하도록 변경했다. `MainV2Activity`도 Splash/Login 이후 전달된 bundle에서 같은 USER_CREATOR DM 분기를 기존 channel/content/message routing보다 먼저 처리하도록 변경했고, 동일 테스트 PASS를 확인했다.
|
||||
- 2026-06-18: 리뷰 게이트에서 LiveRoom foreground 상태일 때 `ACTION_LIVE_ROOM_DEEPLINK_CONFIRM` 브로드캐스트가 USER_CREATOR DM push를 먼저 가로챌 수 있다는 blocker를 확인했다. `DeepLinkActivitySourceTest`에 `routeForegroundDeepLink(deepLinkExtras)`가 LiveRoom foreground confirm broadcast보다 먼저 실행되는 순서 회귀 테스트를 추가했고, 수정 전 `DeepLinkActivitySourceTest.kt:28` assertion failure로 RED를 확인했다. 이후 `DeepLinkActivity.onCreate()`에서 foreground USER_CREATOR extras는 LiveRoom 브로드캐스트 전에 `routeForegroundDeepLink(deepLinkExtras)`를 먼저 시도하도록 변경했고, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.main.DeepLinkActivitySourceTest" --max-workers=1` PASS를 확인했다.
|
||||
- 2026-06-18: Phase 12 코드 리뷰에서 URL query에 `chat_type=USER_CREATOR`가 포함된 deepLink 진입은 `DeepLinkActivity.buildDeepLinkExtras()`가 `room_id`는 복사하지만 `chat_type`은 복사하지 않아 DM 분기를 탈 수 없음을 확인했다. `DeepLinkActivitySourceTest`에 URL query `chat_type` 보존 테스트를 추가했고, 수정 전 `DeepLinkActivitySourceTest.kt:28` assertion failure RED를 확인했다. 이후 data query 수집 목록에 `putQuery("chat_type")`을 추가했고 같은 테스트 PASS를 확인했다.
|
||||
|
||||
- [ ] **Task 12.3: 제거 endpoint 호출 회귀 방지 테스트 추가**
|
||||
- [x] **Task 12.3: 제거 endpoint 호출 회귀 방지 테스트 추가**
|
||||
- Files:
|
||||
- Modify: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModelTest.kt`
|
||||
- Modify: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRepositoryTest.kt`
|
||||
@@ -799,8 +806,10 @@
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRemovedEndpointSourceTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRepositoryTest" --max-workers=1`
|
||||
- Expected: 제거 endpoint 문자열 없음, 텍스트 전송 WebSocket 사용, leave/close WebSocket 사용 테스트가 PASS.
|
||||
- 검증 기록:
|
||||
- 2026-06-18: `DmChatRemovedEndpointSourceTest`를 추가해 active DM 채팅 경로(`DmChatRoomActivity`, `DmChatRoomViewModel`, `DmChatApi`, `DmChatRepository`, `DmChatSocketClient`)에 `/events`, `events/disconnect`, `messages/text`, `text/event-stream`, `EventSource` 문자열이 남지 않는지 source test로 고정했다. 또한 `DmChatRoomViewModel`의 텍스트 전송은 `repository.sendSocketText(`, lifecycle 종료는 `repository.sendLeaveRoom(roomId)`와 `repository.closeSocket()`을 사용하는지 확인했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRemovedEndpointSourceTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRepositoryTest" --max-workers=1` PASS를 확인했다.
|
||||
|
||||
- [ ] **Task 12.4: 음성 메시지 REST 유지 범위 확인**
|
||||
- [x] **Task 12.4: 음성 메시지 REST 유지 범위 확인**
|
||||
- Files:
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatApi.kt`
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatRepository.kt`
|
||||
@@ -812,6 +821,10 @@
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRepositoryTest" --max-workers=1`
|
||||
- Expected: 음성 API를 추가한 경우 multipart endpoint만 검증되고, 추가하지 않은 경우 기존 DTO 보존 테스트가 PASS.
|
||||
- 검증 기록:
|
||||
- 2026-06-18: 현재 DM 채팅 화면에는 음성 전송 UI가 연결되어 있지 않아 신규 multipart API를 추가하지 않았다. `DmChatRemovedEndpointSourceTest`에 `voiceMessageUrl` DTO 필드는 보존하되 `DmChatApi`에 `messages/voice` 및 `Multipart`가 없고 `DmChatRepository`에 `sendDmVoiceMessage`가 없음을 확인하는 source test를 추가했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRemovedEndpointSourceTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRepositoryTest" --max-workers=1` PASS를 확인했다.
|
||||
- 2026-06-18: Phase 12 코드 리뷰 및 통합 검증으로 FCM `chat_type` 전달, foreground/LiveRoom foreground/Splash/Login 이후 USER_CREATOR DM 라우팅, 제거 endpoint 회귀 방지, 음성 DTO 보존 범위를 재검토했다. deepLink payload/query의 `chat_type` 누락 blocker 2건은 위 회귀 테스트로 고정 후 수정했다. 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.fcm.SodaFirebaseMessagingServiceSourceTest" --tests "kr.co.vividnext.sodalive.main.DeepLinkActivitySourceTest" --tests "kr.co.vividnext.sodalive.v2.main.MainV2ActivitySourceTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRemovedEndpointSourceTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRepositoryTest" --max-workers=1`, `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `git diff --check` PASS를 확인했다. 최초 샌드박스 Gradle 실행은 `~/.gradle` wrapper lock 파일 접근 제한으로 실패해 승인된 Gradle 실행으로 재검증했다. `ktlintCheck`에서는 기존 `.editorconfig`의 `disabled_rules` deprecation warning만 출력됐다.
|
||||
- 2026-06-19: Phase 12 최신 코드 리뷰로 FCM deepLink/non-deepLink payload의 `chat_type`/`room_id` 보존, `DeepLinkActivity` foreground USER_CREATOR DM 선분기, URL query `chat_type` 보존, `MainV2Activity` Splash/Login 이후 USER_CREATOR DM 라우팅, 제거 endpoint 문자열 회귀 방지, 음성 DTO 보존 범위를 재확인했다. 추가 blocking issue는 발견하지 못했다. 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.fcm.SodaFirebaseMessagingServiceSourceTest" --tests "kr.co.vividnext.sodalive.main.DeepLinkActivitySourceTest" --tests "kr.co.vividnext.sodalive.v2.main.MainV2ActivitySourceTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRemovedEndpointSourceTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRepositoryTest" --max-workers=1`, `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `git diff --check` PASS를 확인했다. 최초 샌드박스 Gradle 실행은 `~/.gradle` wrapper lock 파일 접근 제한으로 실패해 승인된 Gradle 실행으로 재검증했다. Gradle deprecation warning은 출력됐지만 실패는 없었다.
|
||||
|
||||
### Phase 13: WebSocket 전환 최종 검증과 수동 확인
|
||||
|
||||
|
||||
Reference in New Issue
Block a user