From 05e8874d811d2cd6fc9501923e44d076a1bcbbbc Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 27 Aug 2025 16:49:27 +0900 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=EB=8C=80=ED=99=94=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EC=84=B1=EA=B3=B5=20=EC=8B=9C=20=EB=B0=A9?= =?UTF-8?q?=EB=B3=84=20=EB=A1=9C=EC=BB=AC=20=EB=8D=B0=EC=9D=B4=ED=84=B0(?= =?UTF-8?q?=EB=B0=B0=EA=B2=BD/=EA=B3=B5=EC=A7=80/=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80)=20=EC=82=AD=EC=A0=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ChatMessageDao: deleteMessagesByRoomId(roomId) 추가 - ChatRepository: clearMessagesByRoom(roomId) 추가 - ChatRoomActivity: clearLocalPrefsForRoom(roomId) 구현 및 reset 플로우에 Prefs/DB 삭제 체인 연결 - 요구사항: 대화 초기화 API 성공 시 해당 방의 배경 데이터와 로컬 메시지 등 모든 관련 데이터 제거 --- .../sodalive/chat/talk/room/ChatRepository.kt | 9 +++++++++ .../chat/talk/room/ChatRoomActivity.kt | 18 ++++++++++++++++++ .../chat/talk/room/db/ChatMessageDao.kt | 3 +++ 3 files changed, 30 insertions(+) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRepository.kt index 112d198c..ea07006b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRepository.kt @@ -210,4 +210,13 @@ class ChatRepository( .subscribeOn(Schedulers.io()) .map { ensureSuccess(it) } } + + /** + * 방별 로컬 메시지 전체 삭제 + */ + fun clearMessagesByRoom(roomId: Long): Completable { + return Completable.fromAction { + kotlinx.coroutines.runBlocking { chatDao.deleteMessagesByRoomId(roomId) } + }.subscribeOn(Schedulers.io()) + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt index ce322dca..49a93967 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt @@ -884,6 +884,18 @@ class ChatRoomActivity : BaseActivity( return if (id > 0) id else null } + private fun clearLocalPrefsForRoom(roomId: Long) { + val keys = listOf( + "chat_bg_visible_room_$roomId", + "chat_bg_url_room_$roomId", + "chat_bg_image_id_room_$roomId", + noticePrefKey(roomId) + ) + prefs.edit { + keys.forEach { remove(it) } + } + } + fun onResetChatRequested() { val title = "대화 초기화" val desc = "지금까지의 대화가 모두 초기화 되고 새롭게 대화를 시작합니다." @@ -896,6 +908,12 @@ class ChatRoomActivity : BaseActivity( confirmButtonClick = { val token = "Bearer ${SharedPreferenceManager.token}" val disposable = chatRepository.resetChatRoom(token = token, roomId = roomId) + .flatMap { response -> + // 로컬 데이터(이 방) 삭제: Prefs + DB + clearLocalPrefsForRoom(roomId) + chatRepository.clearMessagesByRoom(roomId) + .andThen(io.reactivex.rxjava3.core.Single.just(response)) + } .observeOn(AndroidSchedulers.mainThread()) .subscribe({ response -> val intent = newIntent(this, response.chatRoomId) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/db/ChatMessageDao.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/db/ChatMessageDao.kt index 19d3efbd..0241b51a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/db/ChatMessageDao.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/db/ChatMessageDao.kt @@ -37,4 +37,7 @@ interface ChatMessageDao { @Query("SELECT DISTINCT roomId FROM chat_messages") suspend fun getAllRoomIds(): List + + @Query("DELETE FROM chat_messages WHERE roomId = :roomId") + suspend fun deleteMessagesByRoomId(roomId: Long) }