Get the current transaction handle in interface method

220 views Asked by At

I'm trying to gain access to the current JDBI transaction handle in my interface method, the purpose of this is to avoid passing the handle as an argument to the interface's methods, thus keeping the interface free of any implementation details. The following example demonstrates what the intended use case is.

I have a UserApplicationService managing the transaction being used

class UserApplicationService(val jdbi: Jdbi, val userRepository: UserRepository) {

    fun changeUserName() {
        jdbi.useTransaction<Exception> {
            userRepository.updateName("peter pan")
        }
    }
}

I have a UserRepository interface

interface UserRepository {
    fun updateName(name: String)
}

I have a PostgresUserRepository implementation of the interface

class PostgresUserRepository: UserRepository {
    override fun updateName(name: String) {
        val handle: Handle = getHandle() // some method to get the handle of the transaction, this is what I need help solving
        handle.execute("...") // set new name of user using the handle
    }
}

Any suggestions on how to solve this would be greatly appreciated.

0

There are 0 answers