package be.simplenotes.persistance import be.simplenotes.domain.usecases.repositories.NoteRepository import be.simplenotes.domain.usecases.repositories.UserRepository import be.simplenotes.persistance.notes.NoteRepositoryImpl import be.simplenotes.persistance.users.UserRepositoryImpl import be.simplenotes.shared.config.DataSourceConfig import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource import me.liuwj.ktorm.database.* import org.koin.dsl.module import javax.sql.DataSource interface DbMigrations { fun migrate() } private fun hikariDataSource(conf: DataSourceConfig): HikariDataSource { val hikariConfig = HikariConfig().also { it.jdbcUrl = conf.jdbcUrl it.driverClassName = conf.driverClassName it.username = conf.username it.password = conf.password it.maximumPoolSize = conf.maximumPoolSize it.connectionTimeout = conf.connectionTimeout } return HikariDataSource(hikariConfig) } val persistanceModule = module { single { UserRepositoryImpl(get()) } single { NoteRepositoryImpl(get()) } single { DbMigrationsImpl(get(), get()) } single { hikariDataSource(get()) } single { Database.connect(get()) } }