Closed tgyuuAn closed 2 weeks ago
override suspend fun getAllMessage(roomId: String): Flow<MentoringChatResponse> = callbackFlow { val listenerRegistration = firebaseFirestore.collection(MESSAGE_COLLECTION) .whereEqualTo("roomId", roomId) .orderBy("createdAt", Query.Direction.ASCENDING) .addSnapshotListener { value, error -> if (error != null) { logAnalytics(error.stackTraceToString()) return@addSnapshotListener } for (dc in value!!.documentChanges) { when (dc.type) { DocumentChange.Type.ADDED -> trySend(dc.document.toObject<MentoringChatResponse>()) DocumentChange.Type.MODIFIED -> Log.d( "test", "Modified message: ${dc.document.data}", ) DocumentChange.Type.REMOVED -> Log.d( "test", "Removed message: ${dc.document.data}", ) } } } awaitClose { listenerRegistration.remove() } }
๊ทธ๋ฆฌ๊ตฌ callbackFlow๋ก ๋๊ธฐ์ ์ผ๋ก ๋ฐ์์ง๋ ๋ฐ์ดํฐ๋ฅผ,
trySend๋ฅผ ์ด์ฉํด์ Flow๋ก ๋ฐ๊ฟ์ค์ ๋ด๋ฆฌ๋ฉด ์ค์๊ฐ์ผ๋ก ์ฑํ ์ ๋ฐ์ ์ ์์!
val listenerRegistration = firebaseFirestore.collection(MESSAGE_COLLECTION) .whereEqualTo("roomId", roomId) .orderBy("createdAt", Query.Direction.ASCENDING)
์๋ฅผ ๋ค์ด ์์๊ฐ์ ํ์์ผ๋ก roomId, createdAt๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง ์ด์์์ ๋ฌด์ธ๊ฐ ํ๋ ค๊ณ ํ๋ค๋ฉด,
๋ณตํฉ ์์ธ์ด๋ผ๊ณ ์๋์ ๊ฐ์ด ๋ณ๋๋ก ์ค์ ํด์ฃผ์ด์ผ ํจ.
๊ทผ๋ฐ ์์ง ๋น ์นํ๊ฒ ์ดํดํ ๊ฑด ์๋๋ฐ, ์ผ๋จ ์๋์ ํจ~
ํ์ฌ ๊ทธ๋ฅ ์ฑํ ๋ฐฉ์ ๋ค์ด์ฌ ๋, addSnapshotListner๋ก ์ฑํ ํ๋๋ง๋ค ๊ณ์๊ณ์ ๋ฟ ๋ฟ ๋ฟ ํ๊ณ callbackFlow๋ก ๋ฐ์์ค๋๋ฐ,
์ฑํ ์ฐฝ ๋ค์ด์ฌ ๋ ์ด์ ์ฑํ ๋ฉ์์ง๋ฅผ ํ์ด์ง์ผ๋ก ์ผ์ ๊ฐ์๋ง ๋ฐ๊ณ , ์คํฌ๋กค ํ๋ฉด ๋ ๋ฐ๊ฒ ๋ง๋ค ๊ฒ์
๊ทธ๋ฆฌ๊ณ ์ดํ์ ์ถ๊ฐ์ ์ธ ์ฑํ ์ addSapshotListner๋ก ๊ตฌ๋ ํ ๋ค ๋ฐ๊ฒ ๋ง๋ค ๊ฒ์.
์ด๊ฑด ๋ค์ PR ์์ ! ๊ธฐ๋ฅ์ฐฌ ๋ ํผ๋ฐ์ค
1. ๐ ๊ด๋ จ๋ ์ด์ ๋ฐ ์๊ฐ
2. ๐ฅ๋ณ๊ฒฝ๋ ์
3. ๐ธ ์คํฌ๋ฆฐ์ท(์ ํ)
4. ๐ก์๊ฒ๋ ํน์ ๊ถ๊ธํ ์ฌํญ๋ค
ํ์ด์ด๋ฒ ์ด์ค ์ฌ์ฉ์, addSnapshotListner๋ก DB์ ์ํ ๋ณํ๋ฅผ ๊ตฌ๋ ํ ์ ์์
๊ทธ๋ฆฌ๊ตฌ callbackFlow๋ก ๋๊ธฐ์ ์ผ๋ก ๋ฐ์์ง๋ ๋ฐ์ดํฐ๋ฅผ,
trySend๋ฅผ ์ด์ฉํด์ Flow๋ก ๋ฐ๊ฟ์ค์ ๋ด๋ฆฌ๋ฉด ์ค์๊ฐ์ผ๋ก ์ฑํ ์ ๋ฐ์ ์ ์์!
firebase์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋, where๊ณผ order ๋ฑ๋ฑ 2๊ฐ์ง ์ด์์ ํ๋์์ ์กฐ๊ฑด์ ์ฃผ๊ณ ์ถ๋ค๋ฉด..
์๋ฅผ ๋ค์ด ์์๊ฐ์ ํ์์ผ๋ก roomId, createdAt๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง ์ด์์์ ๋ฌด์ธ๊ฐ ํ๋ ค๊ณ ํ๋ค๋ฉด,
๋ณตํฉ ์์ธ์ด๋ผ๊ณ ์๋์ ๊ฐ์ด ๋ณ๋๋ก ์ค์ ํด์ฃผ์ด์ผ ํจ.
๊ทผ๋ฐ ์์ง ๋น ์นํ๊ฒ ์ดํดํ ๊ฑด ์๋๋ฐ, ์ผ๋จ ์๋์ ํจ~
์ฑํ ๋ฐ์ดํฐ ์ป์ด์ค๋ ๊ฑฐ ๋ง์ด๊ทธ๋ ์ด์
ํ์ฌ ๊ทธ๋ฅ ์ฑํ ๋ฐฉ์ ๋ค์ด์ฌ ๋, addSnapshotListner๋ก ์ฑํ ํ๋๋ง๋ค ๊ณ์๊ณ์ ๋ฟ ๋ฟ ๋ฟ ํ๊ณ callbackFlow๋ก ๋ฐ์์ค๋๋ฐ,
์ฑํ ์ฐฝ ๋ค์ด์ฌ ๋ ์ด์ ์ฑํ ๋ฉ์์ง๋ฅผ ํ์ด์ง์ผ๋ก ์ผ์ ๊ฐ์๋ง ๋ฐ๊ณ , ์คํฌ๋กค ํ๋ฉด ๋ ๋ฐ๊ฒ ๋ง๋ค ๊ฒ์
๊ทธ๋ฆฌ๊ณ ์ดํ์ ์ถ๊ฐ์ ์ธ ์ฑํ ์ addSapshotListner๋ก ๊ตฌ๋ ํ ๋ค ๋ฐ๊ฒ ๋ง๋ค ๊ฒ์.
์ด๊ฑด ๋ค์ PR ์์ ! ๊ธฐ๋ฅ์ฐฌ ๋ ํผ๋ฐ์ค