Как сделать чтобы 2 столбца username и email были только уникальными и не могли повторятся?

Если вводишь только email новый а username остаётся тот же то user всё равно добавляется. А по идее не должен

класс где добавляется и проверяется user

private fun addUser(
        context: Context,
        binding: ActivityRegisterBinding
    ) {
        Log.d("RegisterClassDebugger", "Начало выполения метода")
        db = Room.databaseBuilder(
            context,
            MyRoomManager::class.java, "db_sessions"
        ).fallbackToDestructiveMigration().allowMainThreadQueries().build()

        if (isEmpty(binding)) {
            Log.d("RegisterClassDebugger", "Начало выполения условия")
            val long = db.userDAO().addUser(
                user = getUser(binding)
            )
            if (/*isNotRepeat(binding)*/ long != -1L) {

                println(long)
                //val userId = getUserDB(getUser(binding)).id!!

                /*db.sessionDAO().createSession(
                    Session(
                        device_name = deviceFullName,
                        user_id = getUserDB(getUser(binding)).id!!,
                        isStatus = StatusSession.Active.name
                    )
                )*/
                registerUseCase.execute(
                    getUser(binding)
                )

                for (i in db.userDAO().getUsers()) {
                    println(i)
                }

                for (i in db.sessionDAO().getSessionAll()) {
                    println(i)
                }
                Toast.makeText(context, "Пользователь создан!",
                    Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(context, "Такой username или email существует",
                    Toast.LENGTH_SHORT).show()

            }


        } else {
            Log.d("RegisterClassDebugger", "Условие неверно")
            Toast.makeText(context, "Не удалось зарегестрировать пользователя!", Toast.LENGTH_SHORT).show()
        }
    }

    private fun getUserDB(
        user: User
    ): User = db.userDAO().getUser(
        avatar = user.avatar,
        username = user.username,
        first_name = user.first_name,
        last_name = user.last_name,
        surname = user.surname,
        password = user.password,
        email = user.email,
        city = user.city,
        date_registration = user.date_registration
    )

    private fun getUser(
        binding: ActivityRegisterBinding
    ): User = User(
        avatar = uri.toString(),
        username = binding.username.text.toString(),
        first_name = binding.firstName.text.toString(),
        last_name = binding.lastName.text.toString(),
        surname = binding.surname.text.toString(),
        password = binding.password.text.toString(),
        email = binding.email.text.toString(),
        city = binding.city.text.toString(),
        date_registration = getDateTimeUseCase.execute()
    )

    private fun isNotRepeat(
        binding: ActivityRegisterBinding
    ): Boolean = isUsername(binding) == null && isEmail(binding) == null

    private fun isUsername(
        binding: ActivityRegisterBinding
    ): String? = try {
        db.userDAO().getUsernameAndEmail(getUser(binding).username, getUser(binding).email).username
    } catch (npe: NullPointerException) {
        null
    }

    private fun isEmail(
        binding: ActivityRegisterBinding
    ): String? = try {
        db.userDAO().getUsernameAndEmail(getUser(binding).username, getUser(binding).email).email
    } catch (npe: NullPointerException) {
        null
    }

    private fun isEmpty(
        binding: ActivityRegisterBinding
    ): Boolean = !binding.username.text?.isEmpty()!! && !binding.firstName.text?.isEmpty()!! &&
            !binding.lastName.text?.isEmpty()!! && !binding.surname.text?.isEmpty()!! &&
            !binding.password.text?.isEmpty()!! && !binding.city.text?.isEmpty()!! &&
            !binding.email.text?.isEmpty()!!

UserDAO

@Dao
interface UserDAO {
    @Query("SELECT * FROM users")
    fun getUsers(): List<User>

    @Query("SELECT * FROM users WHERE id")
    fun getUserID(): User

    @Query("SELECT * FROM users WHERE id=:id")
    fun setUserID(id: Int): User

    @Query("SELECT * FROM users WHERE avatar=:avatar AND username=:username AND first_name=:first_name " +
            "AND last_name=:last_name AND surname=:surname AND password=:password AND email=:email " +
            "AND city=:city AND date_registration=:date_registration")
    fun getUser(
        avatar: String,
        username: String,
        first_name: String,
        last_name: String,
        surname: String,
        password: String,
        email: String,
        city: String,
        date_registration: String
    ): User


    @Query("SELECT * FROM users WHERE username=:username AND email=:email")
    fun getUsernameAndEmail(
        username: String,
        email: String,
    ): User

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    fun addUser(user: User): Long

    @Delete
    fun deleteUser(user: User)
}

модель данных user

@Entity(
    tableName = "users",
    indices = [
        Index(
            value = ["username", "email"],
            unique = true
        )
    ]
)
@Parcelize
data class User(
    @PrimaryKey(
        autoGenerate = true
    ) var id: Int? = null,

    @ColumnInfo(
        name = "avatar"
    ) val avatar: String,

    @ColumnInfo(
        name = "username"
    ) val username: String,

    @ColumnInfo(
        name = "first_name"
    ) val first_name: String,

    @ColumnInfo(
        name = "last_name"
    ) val last_name: String,

    @ColumnInfo(
        name = "surname"
    ) val surname: String,

    @ColumnInfo(
        name = "email"
    ) val email: String,

    @ColumnInfo(
        name = "password"
    ) val password: String,

    @ColumnInfo(
        name = "city"
    ) val city: String,

    @ColumnInfo(
        name = "date_registration"
    ) val date_registration: String
): Parcelable


Ответы (0 шт):