docs(dm): WebSocket 검증 기록을 갱신한다
This commit is contained in:
@@ -517,7 +517,7 @@
|
|||||||
|
|
||||||
### Phase 9: WebSocket 계약/클라이언트 기반 추가
|
### Phase 9: WebSocket 계약/클라이언트 기반 추가
|
||||||
|
|
||||||
- [ ] **Task 9.1: WebSocket envelope와 payload 모델 정의**
|
- [x] **Task 9.1: WebSocket envelope와 payload 모델 정의**
|
||||||
- Files:
|
- Files:
|
||||||
- Create: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatSocketModels.kt`
|
- Create: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatSocketModels.kt`
|
||||||
- Create: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatSocketParserTest.kt`
|
- Create: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatSocketParserTest.kt`
|
||||||
@@ -534,8 +534,12 @@
|
|||||||
- 검증:
|
- 검증:
|
||||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketParserTest" --max-workers=1`
|
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketParserTest" --max-workers=1`
|
||||||
- Expected: `JOINED`, `MESSAGE`, `SEND_ACK`, `ERROR`, `PONG`, 알 수 없는 type, 잘못된 JSON 파싱 테스트가 PASS.
|
- Expected: `JOINED`, `MESSAGE`, `SEND_ACK`, `ERROR`, `PONG`, 알 수 없는 type, 잘못된 JSON 파싱 테스트가 PASS.
|
||||||
|
- 검증 기록:
|
||||||
|
- 2026-06-18: `DmChatSocketParserTest`를 먼저 추가하고 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketParserTest" --max-workers=1` 실행 시 `DmChatSocketEvent`/`DmChatSocketParser` 미정의 컴파일 오류로 RED를 확인했다. 이후 `DmChatSocketModels.kt`에 `type`/`payload` envelope, `JOIN_ROOM`/`LEAVE_ROOM`/`SEND_TEXT`/`PING` client type, `JOINED`/`MESSAGE`/`SEND_ACK`/`ERROR`/`PONG` parser 모델을 추가했다. 재실행 결과 `DmChatSocketParserTest` PASS를 확인했고, `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`도 PASS했다. `ktlintCheck`에서는 기존 `.editorconfig`의 `disabled_rules` deprecation warning이 출력됐지만 실패는 없었다.
|
||||||
|
- 2026-06-18: 리뷰에서 `ERROR`의 `code`/`message` nullable 보존 테스트가 부족하다는 지적을 받아 `code=null`, `message=null` 케이스를 추가했다. 수정 전 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketParserTest" --max-workers=1` 실행 결과 `ERROR type은 nullable code와 message를 보존한다` 테스트가 RED로 실패함을 확인했고, `DmChatSocketErrorPayload`와 `DmChatSocketEvent.Error`의 `code`/`message`를 nullable로 변경한 뒤 같은 테스트가 PASS했다. 이후 `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1` 모두 PASS를 확인했다.
|
||||||
|
- 2026-06-18: 코드 리뷰로 `DmChatSocketModels.kt`와 `DmChatSocketParserTest.kt`를 재검토했다. `type`/`payload` envelope, `JOINED`/`MESSAGE`/`SEND_ACK`/`ERROR`/`PONG` 파싱, nullable `ERROR` 필드 보존, 알 수 없는 type/잘못된 JSON 무시 동작이 Task 9.1 범위와 일치함을 확인했고 추가 결함은 발견하지 못했다. 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketParserTest" --max-workers=1` PASS를 확인했다.
|
||||||
|
|
||||||
- [ ] **Task 9.2: OkHttp WebSocket 클라이언트 추가**
|
- [x] **Task 9.2: OkHttp WebSocket 클라이언트 추가**
|
||||||
- Files:
|
- Files:
|
||||||
- Create: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatSocketClient.kt`
|
- Create: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatSocketClient.kt`
|
||||||
- Create: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatSocketClientTest.kt`
|
- Create: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatSocketClientTest.kt`
|
||||||
@@ -551,6 +555,9 @@
|
|||||||
- 검증:
|
- 검증:
|
||||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketClientTest" --max-workers=1`
|
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketClientTest" --max-workers=1`
|
||||||
- Expected: endpoint URL 변환, Authorization header, `JOIN_ROOM`/`LEAVE_ROOM`/`SEND_TEXT`/`PING` JSON 송신, 수신 callback, close 정리 테스트가 PASS.
|
- Expected: endpoint URL 변환, Authorization header, `JOIN_ROOM`/`LEAVE_ROOM`/`SEND_TEXT`/`PING` JSON 송신, 수신 callback, close 정리 테스트가 PASS.
|
||||||
|
- 검증 기록:
|
||||||
|
- 2026-06-18: `DmChatSocketClientTest`를 먼저 추가하고 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketClientTest" --max-workers=1` 실행 시 `DmChatSocketClient` 미정의 컴파일 오류로 RED를 확인했다. 이후 `DmChatSocketClient.kt`를 추가해 `https`/`http` base URL의 WebSocket scheme 변환, `Authorization: Bearer ...` handshake header, 명시적 `JOIN_ROOM`/`LEAVE_ROOM`/`SEND_TEXT`/`PING` 송신, parser 기반 수신 event callback, 알 수 없는 type/잘못된 JSON 무시, close 정리를 구현했다. 구현 직후 URL scheme 검증 2건이 RED로 남아 OkHttp `Request.url` 정규화 특성을 반영해 원본 WebSocket URL을 request tag로 보존하도록 조정했고, 재실행 결과 `DmChatSocketClientTest` PASS를 확인했다. `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1`도 PASS했다. `ktlintCheck`에서는 기존 `.editorconfig`의 `disabled_rules` deprecation warning이 출력됐지만 실패는 없었다.
|
||||||
|
- 2026-06-18: 코드 리뷰로 `DmChatSocketClient.kt`와 `DmChatSocketClientTest.kt`를 재검토했다. WebSocket endpoint scheme 변환, bearer header, 명시적 `JOIN_ROOM`/`LEAVE_ROOM`/`SEND_TEXT`/`PING` 송신, 현재 socket guard, close 정리, parser event 전달이 Task 9.2 범위와 일치함을 확인했고 추가 결함은 발견하지 못했다. 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketClientTest" --max-workers=1`, `./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를 확인했다.
|
||||||
|
|
||||||
- [ ] **Task 9.3: Repository와 DI를 WebSocket 클라이언트 기준으로 전환**
|
- [ ] **Task 9.3: Repository와 DI를 WebSocket 클라이언트 기준으로 전환**
|
||||||
- Files:
|
- Files:
|
||||||
|
|||||||
Reference in New Issue
Block a user