Ну, вот хитрый. У меня есть запрос из моей комнаты DB. Результатом является реляционный POJO
class MessageWithMsgQueueAccount {
@Embedded
var message: MessageDto? = null
@Relation(parentColumn = "clientMessageId", entityColumn = "clientMessageId", entity = MessageQueueDto::class)
var messageQueueList: List<MsgQueueAccount> = ArrayList()
}
Так что, когда я получаю это, я применяю Преобразование к этому объекту, чтобы я мог создать другое, которое имеет только ту информацию, которую я хочу.
fun toContactMessageChatItem(item: MessageWithMsgQueueAccount?, accountDto: AccountDto): MessageChatItem {
item?.message?.let {
// Procedure for creating the fields that i want
val isQuoted = it.quotemsgid > 0L
if (isQuoted) {
// Fetch quoted message body
}
return MessageChatItem(.....)
} ?: run {
return MessageChatItem(..........)
}
}
Поскольку это чат, одно поле, которое я хочу настроить, это тело сообщения в кавычках. То, что я имею в качестве «ввода», является messageId сообщения, которое цитируется. Так что это означает, что я должен снова сделать запрос к моей комнате DB внутри функции преобразования. То, как я это сделал, это
val isQuoted = it.quotemsgid > 0L
var quotedBody = ""
if (isQuoted) {
// Fetch quoted message body
viewModelScope.launch(Dispatchers.IO) {
val quotedMessage = messagesRepository.getMessageByMessageId(it.quotemsgid)
withContext(Dispatchers.Main) {
quotedBody = quotedMessage.body
}
}
}
Нет конкретного вопроса c, но есть ли лучший способ сделать что-то подобное, то есть запросить БД внутри функции преобразования. Есть ли способ, что это создаст проблему синхронизации с моими элементами или что-то?