package org.mercury_im.messenger.persistence.room.dao; import androidx.room.Dao; import androidx.room.Query; import androidx.room.TypeConverters; import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.persistence.room.model.RoomChatModel; import org.mercury_im.messenger.persistence.pojo.Chat; import org.mercury_im.messenger.persistence.room.type_converter.EntityBareJidConverter; import java.util.List; import io.reactivex.Maybe; import io.reactivex.Observable; @Dao @TypeConverters(EntityBareJidConverter.class) public interface ChatDao extends BaseDao { @Query("SELECT * FROM chats") Observable> getAllChats(); @Query("SELECT chats.* FROM chats JOIN entities WHERE fk_account_id = :accountId") Observable> getAllChatsOfAccount(long accountId); @Query("SELECT * FROM chats WHERE fk_entity_id = :entityId") Maybe maybeGetChatWithEntity(long entityId); @Query("SELECT * FROM chats WHERE fk_entity_id = :entityId") Observable getChatWithEntity(long entityId); @Query("SELECT chats.* FROM chats JOIN entities WHERE fk_account_id = :accountId AND jid = :jid") Maybe maybeGetChatWithJid(long accountId, EntityBareJid jid); @Query("SELECT chats.* FROM chats JOIN entities WHERE fk_account_id = :accountId AND jid = :jid") Observable getChatWithJid(long accountId, EntityBareJid jid); @Query("SELECT chats.* FROM chats JOIN contacts WHERE contacts.pk_contact_id = :contactId") Maybe maybeGetChatWithContact(long contactId); @Query("SELECT chats.* FROM chats JOIN contacts WHERE contacts.pk_contact_id = :contactId") Observable getChatWithContact(long contactId); @Query("SELECT chats.pk_chat_id as chatId, " + "chats.fk_entity_id as entityId, " + "contacts.rostername as contactName, " + "entities.fk_account_id as accountId, " + "jid, active " + "from chats " + "LEFT JOIN entities " + "ON chats.fk_entity_id = entities.pk_entity_id " + "LEFT JOIN contacts " + "ON entities.pk_entity_id = contacts.fk_entity_id") Observable> getChatPojos(); }