feat: Safely set last logged account public key using null safety

This commit is contained in:
k1ngsterr1
2026-01-12 17:37:42 +05:00
parent 8aa17383cf
commit fb339642fa
6 changed files with 134 additions and 26 deletions

View File

@@ -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>
}

View File

@@ -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