tgyuuAn / BaekyoungE

์ž์—ฐ์–ด ์ฒ˜๋ฆฌ ๊ธฐ๋ฐ˜ ์ง„๋กœ ์ƒ๋‹ด chat bot ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜
5 stars 0 forks source link

Feature/#43 #49

Closed tgyuuAn closed 2 weeks ago

tgyuuAn commented 2 weeks ago

1. ๐Ÿ“„ ๊ด€๋ จ๋œ ์ด์Šˆ ๋ฐ ์†Œ๊ฐœ

2. ๐Ÿ”ฅ๋ณ€๊ฒฝ๋œ ์ 

3. ๐Ÿ“ธ ์Šคํฌ๋ฆฐ์ƒท(์„ ํƒ)

4. ๐Ÿ’ก์•Œ๊ฒŒ๋œ ํ˜น์€ ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ๋“ค

ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์‚ฌ์šฉ์‹œ, addSnapshotListner๋กœ DB์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Œ

    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๋กœ ๋ฐ”๊ฟ”์ค˜์„œ ๋‚ด๋ฆฌ๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฑ„ํŒ…์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ!







firebase์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ, where๊ณผ order ๋“ฑ๋“ฑ 2๊ฐ€์ง€ ์ด์ƒ์˜ ํ•„๋“œ์—์„œ ์กฐ๊ฑด์„ ์ฃผ๊ณ ์‹ถ๋‹ค๋ฉด..

        val listenerRegistration = firebaseFirestore.collection(MESSAGE_COLLECTION)
            .whereEqualTo("roomId", roomId)
            .orderBy("createdAt", Query.Direction.ASCENDING)

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์™€๊ฐ™์€ ํ˜•์‹์œผ๋กœ roomId, createdAt๊ณผ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ์ด์ƒ์—์„œ ๋ฌด์–ธ๊ฐ€ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด,

๋ณตํ•ฉ ์ƒ‰์ธ์ด๋ผ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ„๋„๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•จ.

image




๊ทผ๋ฐ ์•„์ง ๋น ์‹นํ•˜๊ฒŒ ์ดํ•ดํ•œ ๊ฑด ์•„๋‹Œ๋ฐ, ์ผ๋‹จ ์ž‘๋™์€ ํ•จ~







์ฑ„ํŒ… ๋ฐ์ดํ„ฐ ์–ป์–ด์˜ค๋Š” ๊ฑฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

ํ˜„์žฌ ๊ทธ๋ƒฅ ์ฑ„ํŒ…๋ฐฉ์— ๋“ค์–ด์˜ฌ ๋•Œ, addSnapshotListner๋กœ ์ฑ„ํŒ… ํ•˜๋‚˜๋งˆ๋‹ค ๊ณ„์†๊ณ„์† ๋ฟ…๋ฟ…๋ฟ…ํ•˜๊ณ  callbackFlow๋กœ ๋ฐ›์•„์˜ค๋Š”๋ฐ,

์ฑ„ํŒ…์ฐฝ ๋“ค์–ด์˜ฌ ๋•Œ ์ด์ „ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋ฅผ ํŽ˜์ด์ง•์œผ๋กœ ์ผ์ • ๊ฐœ์ˆ˜๋งŒ ๋ฐ›๊ณ , ์Šคํฌ๋กค ํ•˜๋ฉด ๋˜ ๋ฐ›๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž„

๊ทธ๋ฆฌ๊ณ  ์ดํ›„์— ์ถ”๊ฐ€์ ์ธ ์ฑ„ํŒ…์„ addSapshotListner๋กœ ๊ตฌ๋…ํ•œ ๋’ค ๋ฐ›๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž„.

์ด๊ฑด ๋‹ค์Œ PR ์˜ˆ์ •! ๊ธฐ๋˜ฅ์ฐฌ ๋ ˆํผ๋Ÿฐ์Šค