SyncOpDao.kt 31 lignes · 1067 octets
package fr.ebii.card2vcf.sync

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

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

    @Query("SELECT * FROM sync_ops ORDER BY createdAt ASC")
    suspend fun listAll(): List<SyncOpEntity>

    @Query("SELECT * FROM sync_ops ORDER BY createdAt ASC")
    fun observeAll(): Flow<List<SyncOpEntity>>

    @Query("UPDATE sync_ops SET attempts = attempts + 1, lastError = :error WHERE id = :id")
    suspend fun markFailure(id: Long, error: String?)

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

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

    @Query("SELECT * FROM sync_ops WHERE entityType = :entityType AND localId = :localId LIMIT 1")
    suspend fun findByEntityTypeAndLocalId(entityType: String, localId: Long): SyncOpEntity?
}