CrmContactDao.kt 52 lignes · 1649 octets
package fr.ebii.card2vcf.data

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import kotlinx.coroutines.flow.Flow

@Dao
interface CrmContactDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(entity: CrmContactEntity): Long

    @Update
    suspend fun update(entity: CrmContactEntity)

    @Query("DELETE FROM crm_contacts WHERE id = :id")
    suspend fun deleteById(id: Long)

    @Query("SELECT * FROM crm_contacts WHERE id = :id")
    suspend fun getById(id: Long): CrmContactEntity?

    @Query("SELECT * FROM crm_contacts WHERE serverId = :serverId")
    suspend fun getByServerId(serverId: String): CrmContactEntity?

    @Query("DELETE FROM crm_contacts WHERE serverId = :serverId")
    suspend fun deleteByServerId(serverId: String)

    @Query("SELECT * FROM crm_contacts ORDER BY createdAt DESC")
    fun observeAll(): Flow<List<CrmContactEntity>>

    @Query("SELECT * FROM crm_contacts ORDER BY createdAt DESC")
    suspend fun getAll(): List<CrmContactEntity>

    @Query(
        """
        SELECT rowid FROM crm_contacts_fts
        WHERE crm_contacts_fts MATCH :query
        """,
    )
    suspend fun searchIds(query: String): List<Long>

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insertExclusion(ex: DuplicateExclusionEntity): Long

    @Query("SELECT * FROM duplicate_exclusions")
    suspend fun getExclusions(): List<DuplicateExclusionEntity>

    @Query("DELETE FROM duplicate_exclusions WHERE idA = :id OR idB = :id")
    suspend fun deleteExclusionsFor(id: Long)
}