feat: Safely set last logged account public key using null safety
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package com.rosetta.messenger.database
|
||||
|
||||
import androidx.room.*
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
/**
|
||||
* Entity для blacklist (заблокированные пользователи)
|
||||
*/
|
||||
@Entity(
|
||||
tableName = "blacklist",
|
||||
indices = [
|
||||
Index(value = ["account", "public_key"], unique = true)
|
||||
]
|
||||
)
|
||||
data class BlacklistEntity(
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
val id: Long = 0,
|
||||
|
||||
@ColumnInfo(name = "public_key")
|
||||
val publicKey: String, // Публичный ключ заблокированного пользователя
|
||||
|
||||
@ColumnInfo(name = "account")
|
||||
val account: String // Мой публичный ключ
|
||||
)
|
||||
|
||||
/**
|
||||
* DAO для работы с blacklist
|
||||
*/
|
||||
@Dao
|
||||
interface BlacklistDao {
|
||||
|
||||
/**
|
||||
* Добавить пользователя в blacklist
|
||||
*/
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun blockUser(blacklist: BlacklistEntity)
|
||||
|
||||
/**
|
||||
* Удалить пользователя из blacklist
|
||||
*/
|
||||
@Query("DELETE FROM blacklist WHERE public_key = :publicKey AND account = :account")
|
||||
suspend fun unblockUser(publicKey: String, account: String)
|
||||
|
||||
/**
|
||||
* Проверить, заблокирован ли пользователь
|
||||
*/
|
||||
@Query("SELECT COUNT(*) > 0 FROM blacklist WHERE public_key = :publicKey AND account = :account")
|
||||
suspend fun isUserBlocked(publicKey: String, account: String): Boolean
|
||||
|
||||
/**
|
||||
* Получить все заблокированные аккаунты для данного пользователя
|
||||
*/
|
||||
@Query("SELECT * FROM blacklist WHERE account = :account")
|
||||
fun getBlockedUsers(account: String): Flow<List<BlacklistEntity>>
|
||||
|
||||
/**
|
||||
* Получить список всех заблокированных публичных ключей
|
||||
*/
|
||||
@Query("SELECT public_key FROM blacklist WHERE account = :account")
|
||||
suspend fun getBlockedPublicKeys(account: String): List<String>
|
||||
}
|
||||
@@ -9,15 +9,17 @@ import androidx.room.RoomDatabase
|
||||
entities = [
|
||||
EncryptedAccountEntity::class,
|
||||
MessageEntity::class,
|
||||
DialogEntity::class
|
||||
DialogEntity::class,
|
||||
BlacklistEntity::class
|
||||
],
|
||||
version = 2,
|
||||
version = 3,
|
||||
exportSchema = false
|
||||
)
|
||||
abstract class RosettaDatabase : RoomDatabase() {
|
||||
abstract fun accountDao(): AccountDao
|
||||
abstract fun messageDao(): MessageDao
|
||||
abstract fun dialogDao(): DialogDao
|
||||
abstract fun blacklistDao(): BlacklistDao
|
||||
|
||||
companion object {
|
||||
@Volatile
|
||||
|
||||
Reference in New Issue
Block a user