Comencé a usar la base de datos de Room y revisé varios documentos para crear entidades de room. Estas son mis relaciones. Un canal de chat puede tener muchas conversaciones. Entonces esto va como una relación de uno a muchos. Por lo tanto, creé entidades como a continuación.
Entidad de canal
@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
}
Entidad de conversación
@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
}
Ahora, como puede ver, la conversación pertenece a un canal . Cuando el usuario ve una lista de canales, necesito mostrar varios atributos de la última conversación en el elemento de la lista. Mi pregunta es, ¿es suficiente si solo declaro una relación como la anterior o si debo contener un objeto de conversación en la clase Channel? ¿Cuáles son las otras formas en que puedo manejarlo? Porque la interfaz de usuario necesita obtener la conversación más reciente que ocurrió junto con el tiempo, el estado, etc. en cada elemento de la lista de canales cuando el usuario se desplaza. Por lo tanto, no debería haber ningún retraso en la interfaz de usuario debido a esto cuando consulto.
¿Y cómo puedo tener un objeto Converstaion reciente en el objeto Channel?