mirror of
https://codeberg.org/Mercury-IM/Mercury-IM
synced 2024-09-20 23:09:35 +02:00
80 lines
3 KiB
Java
80 lines
3 KiB
Java
package org.mercury_im.messenger.persistence.room.dao;
|
|
|
|
import androidx.room.Dao;
|
|
import androidx.room.Insert;
|
|
import androidx.room.Query;
|
|
import androidx.room.TypeConverters;
|
|
|
|
import org.jxmpp.jid.EntityBareJid;
|
|
import org.mercury_im.messenger.persistence.room.model.RoomContactModel;
|
|
import org.mercury_im.messenger.persistence.room.model.RoomEntityModel;
|
|
import org.mercury_im.messenger.persistence.room.type_converter.EntityBareJidConverter;
|
|
|
|
import java.util.List;
|
|
|
|
import io.reactivex.Completable;
|
|
import io.reactivex.Maybe;
|
|
import io.reactivex.Observable;
|
|
import io.reactivex.Single;
|
|
|
|
import static androidx.room.OnConflictStrategy.REPLACE;
|
|
|
|
@Dao
|
|
@TypeConverters(EntityBareJidConverter.class)
|
|
public interface ContactDao extends BaseDao<RoomContactModel> {
|
|
|
|
@Override
|
|
@Insert(onConflict = REPLACE)
|
|
Single<Long> insert(RoomContactModel entity);
|
|
|
|
@Query("SELECT * FROM contacts WHERE pk_contact_id = :id")
|
|
Observable<RoomContactModel> getContact(long id);
|
|
|
|
@Query("SELECT * FROM contacts WHERE pk_contact_id = :id")
|
|
Maybe<RoomContactModel> maybeGetContact(long id);
|
|
|
|
@Query("SELECT * FROM contacts WHERE fk_entity_id = :entityId")
|
|
Maybe<RoomContactModel> getContactForEntityId(long entityId);
|
|
|
|
@Query("SELECT * FROM contacts")
|
|
Observable<List<RoomContactModel>> getAllContacts();
|
|
|
|
@Query("SELECT contacts.* FROM contacts JOIN entities " +
|
|
"ON contacts.fk_entity_id = entities.pk_entity_id " +
|
|
"WHERE entities.fk_account_id = :accountId AND jid = :jid")
|
|
Maybe<RoomContactModel> maybeGetContactByJid(long accountId, EntityBareJid jid);
|
|
|
|
@Query("SELECT contacts.* FROM contacts JOIN entities " +
|
|
"ON contacts.fk_entity_id = entities.pk_entity_id " +
|
|
"WHERE entities.fk_account_id = :accountId AND jid = :jid")
|
|
Observable<RoomContactModel> getContactByJid(long accountId, EntityBareJid jid);
|
|
|
|
@Query("SELECT contacts.* FROM contacts JOIN entities " +
|
|
"ON contacts.fk_entity_id = entities.pk_entity_id " +
|
|
"WHERE entities.fk_account_id = :accountId")
|
|
Observable<List<RoomContactModel>> getContactsForAccount(long accountId);
|
|
|
|
@Query("DELETE FROM contacts WHERE pk_contact_id = :id")
|
|
Completable deleteContact(long id);
|
|
|
|
@Query("DELETE FROM contacts WHERE fk_entity_id = :entityId")
|
|
Completable deleteContactForEntity(long entityId);
|
|
|
|
@Query("DELETE FROM contacts")
|
|
Completable deleteAll();
|
|
|
|
@Query("DELETE FROM contacts WHERE fk_entity_id IN " +
|
|
"(SELECT pk_entity_id FROM entities " +
|
|
"WHERE entities.fk_account_id = :accountId)")
|
|
Completable deleteAllForAccount(long accountId);
|
|
|
|
@Query("DELETE FROM contacts WHERE pk_contact_id IN(:ids)")
|
|
Completable deleteContacts(long[] ids);
|
|
|
|
@Query("SELECT entities.* " +
|
|
"FROM contacts INNER JOIN entities " +
|
|
"ON contacts.fk_entity_id = entities.pk_entity_id " +
|
|
"WHERE contacts.pk_contact_id = :contactId")
|
|
Single<RoomEntityModel> getEntityForContactId(long contactId);
|
|
}
|