Tôi bắt đầu sử dụng cơ sở dữ liệu phòng và trải qua một số tài liệu để tạo các thực thể phòng. Đây là những mối quan hệ của tôi. Một kênh trò chuyện có thể có nhiều cuộc trò chuyện. Vì vậy, điều này đi như mối quan hệ một-nhiều. Do đó tôi đã tạo ra các thực thể như dưới đây.
Thực thể kênh
@Entity(primaryKeys = ["channelId"])
@TypeConverters(TypeConverters::class)
data class Channel(
@field:SerializedName("channelId")
val channelId: String,
@field:SerializedName("channelName")
val channelName: String,
@field:SerializedName("createdBy")
val creationTs: String,
@field:SerializedName("creationTs")
val createdBy: String,
@field:SerializedName("members")
val members: List<String>,
@field:SerializedName("favMembers")
val favMembers: List<String>
) {
// Does not show up in the response but set in post processing.
var isOneToOneChat: Boolean = false
var isChatBot: Boolean = false
}
Thực thể hội thoại
@Entity(primaryKeys = ["msgId"],
foreignKeys = [
ForeignKey(entity = Channel::class,
parentColumns = arrayOf("channelId"),
childColumns = arrayOf("msgId"),
onUpdate = CASCADE,
onDelete = CASCADE
)
])
@TypeConverters(TypeConverters::class)
data class Conversation(
@field:SerializedName("msgId")
val msgId: String,
@field:SerializedName("employeeID")
val employeeID: String,
@field:SerializedName("channelId")
val channelId: String,
@field:SerializedName("channelName")
val channelName: String,
@field:SerializedName("sender")
val sender: String,
@field:SerializedName("sentAt")
val sentAt: String,
@field:SerializedName("senderName")
val senderName: String,
@field:SerializedName("status")
val status: String,
@field:SerializedName("msgType")
val msgType: String,
@field:SerializedName("type")
val panicType: String?,
@field:SerializedName("message")
val message: List<Message>,
@field:SerializedName("deliveredTo")
val delivered: List<Delivered>?,
@field:SerializedName("readBy")
val read: List<Read>?
) {
data class Message(
@field:SerializedName("txt")
val txt: String,
@field:SerializedName("lang")
val lang: String,
@field:SerializedName("trans")
val trans: String
)
data class Delivered(
@field:SerializedName("employeeID")
val employeeID: String,
@field:SerializedName("date")
val date: String
)
data class Read(
@field:SerializedName("employeeID")
val employeeID: String,
@field:SerializedName("date")
val date: String
)
// Does not show up in the response but set in post processing.
var isHeaderView: Boolean = false
}
Bây giờ bạn có thể thấy Hội thoại thuộc về Kênh . Khi người dùng nhìn thấy một danh sách các kênh, tôi cần hiển thị một số thuộc tính của Cuộc hội thoại cuối cùng trong mục danh sách. Câu hỏi của tôi là, liệu tôi chỉ cần khai báo mối quan hệ như trên hay tôi nên chứa đối tượng Converstion trong lớp Kênh? Những cách khác mà tôi có thể xử lý nó là gì? Bởi vì UI cần có được cuộc trò chuyện gần đây nhất xảy ra cùng với thời gian, trạng thái, v.v. trong mỗi mục của danh sách kênh khi người dùng cuộn. Vì vậy, không nên có bất kỳ độ trễ nào trong UI vì điều này khi tôi truy vấn.
Và làm thế nào tôi có thể có đối tượng Converstaion gần đây trong đối tượng Kênh?