fix(chat): 대화 초기화 성공 시 방별 로컬 데이터(배경/공지/메시지) 삭제 처리
- ChatMessageDao: deleteMessagesByRoomId(roomId) 추가 - ChatRepository: clearMessagesByRoom(roomId) 추가 - ChatRoomActivity: clearLocalPrefsForRoom(roomId) 구현 및 reset 플로우에 Prefs/DB 삭제 체인 연결 - 요구사항: 대화 초기화 API 성공 시 해당 방의 배경 데이터와 로컬 메시지 등 모든 관련 데이터 제거
This commit is contained in:
		@@ -210,4 +210,13 @@ class ChatRepository(
 | 
				
			|||||||
            .subscribeOn(Schedulers.io())
 | 
					            .subscribeOn(Schedulers.io())
 | 
				
			||||||
            .map { ensureSuccess(it) }
 | 
					            .map { ensureSuccess(it) }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 방별 로컬 메시지 전체 삭제
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    fun clearMessagesByRoom(roomId: Long): Completable {
 | 
				
			||||||
 | 
					        return Completable.fromAction {
 | 
				
			||||||
 | 
					            kotlinx.coroutines.runBlocking { chatDao.deleteMessagesByRoomId(roomId) }
 | 
				
			||||||
 | 
					        }.subscribeOn(Schedulers.io())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -884,6 +884,18 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
 | 
				
			|||||||
        return if (id > 0) id else null
 | 
					        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() {
 | 
					    fun onResetChatRequested() {
 | 
				
			||||||
        val title = "대화 초기화"
 | 
					        val title = "대화 초기화"
 | 
				
			||||||
        val desc = "지금까지의 대화가 모두 초기화 되고 새롭게 대화를 시작합니다."
 | 
					        val desc = "지금까지의 대화가 모두 초기화 되고 새롭게 대화를 시작합니다."
 | 
				
			||||||
@@ -896,6 +908,12 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
 | 
				
			|||||||
            confirmButtonClick = {
 | 
					            confirmButtonClick = {
 | 
				
			||||||
                val token = "Bearer ${SharedPreferenceManager.token}"
 | 
					                val token = "Bearer ${SharedPreferenceManager.token}"
 | 
				
			||||||
                val disposable = chatRepository.resetChatRoom(token = token, roomId = roomId)
 | 
					                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())
 | 
					                    .observeOn(AndroidSchedulers.mainThread())
 | 
				
			||||||
                    .subscribe({ response ->
 | 
					                    .subscribe({ response ->
 | 
				
			||||||
                        val intent = newIntent(this, response.chatRoomId)
 | 
					                        val intent = newIntent(this, response.chatRoomId)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,4 +37,7 @@ interface ChatMessageDao {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Query("SELECT DISTINCT roomId FROM chat_messages")
 | 
					    @Query("SELECT DISTINCT roomId FROM chat_messages")
 | 
				
			||||||
    suspend fun getAllRoomIds(): List<Long>
 | 
					    suspend fun getAllRoomIds(): List<Long>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Query("DELETE FROM chat_messages WHERE roomId = :roomId")
 | 
				
			||||||
 | 
					    suspend fun deleteMessagesByRoomId(roomId: Long)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user