dm-91
This commit is contained in:
parent
1a064c3537
commit
bcd7b5f141
2 changed files with 38 additions and 0 deletions
|
|
@ -95,4 +95,8 @@ dependencies {
|
||||||
implementation("androidx.emoji2:emoji2:$emoji2Version")
|
implementation("androidx.emoji2:emoji2:$emoji2Version")
|
||||||
implementation("androidx.emoji2:emoji2-bundled:$emoji2Version") // 自帶字型包
|
implementation("androidx.emoji2:emoji2-bundled:$emoji2Version") // 自帶字型包
|
||||||
|
|
||||||
|
val roomVersion = "2.6.1" // 可以使用目前穩定的 2.6.1 或最新版本
|
||||||
|
implementation("androidx.room:room-runtime:$roomVersion")
|
||||||
|
implementation("androidx.room:room-ktx:$roomVersion") // 支援 Flow 必須要加這行
|
||||||
|
ksp("androidx.room:room-compiler:$roomVersion") // 使用 KSP 來編譯 Room 註解
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.example.login_v3.home.Message.ViewModel.Detail
|
||||||
|
|
||||||
|
import androidx.room.Dao
|
||||||
|
import androidx.room.Entity
|
||||||
|
import androidx.room.Insert
|
||||||
|
import androidx.room.OnConflictStrategy
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import androidx.room.Query
|
||||||
|
|
||||||
|
enum class MessageStatus { SENDING, SUCCESS, FAILED }
|
||||||
|
|
||||||
|
@Entity(tableName = "messages")
|
||||||
|
data class MessageEntity(
|
||||||
|
@PrimaryKey val id: String, // 臨時訊息可以用 UUID.randomUUID().toString()
|
||||||
|
val roomId: String,
|
||||||
|
val content: String,
|
||||||
|
val senderId: String,
|
||||||
|
val timestamp: Long,
|
||||||
|
val status: MessageStatus // 👈 核心:用來控制 UI 顯示樣式
|
||||||
|
)
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface MessageDao {
|
||||||
|
// 💡 監聽特定聊天室的訊息流
|
||||||
|
@Query("SELECT * FROM messages WHERE roomId = :roomId ORDER BY timestamp ASC")
|
||||||
|
fun getMessagesFlow(roomId: String): Flow<List<MessageEntity>>
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
suspend fun insertOrUpdate(message: MessageEntity)
|
||||||
|
|
||||||
|
@Query("DELETE FROM messages WHERE id = :id")
|
||||||
|
suspend fun deleteById(id: String)
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue