package be.simplenotes.persistance import be.simplenotes.config.DataSourceConfig import be.simplenotes.persistance.converters.NoteConverter import be.simplenotes.persistance.converters.NoteConverterImpl import be.simplenotes.persistance.converters.UserConverter import be.simplenotes.persistance.converters.UserConverterImpl import be.simplenotes.persistance.notes.NoteRepositoryImpl import be.simplenotes.persistance.repositories.NoteRepository import be.simplenotes.persistance.repositories.UserRepository import be.simplenotes.persistance.users.UserRepositoryImpl import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource import me.liuwj.ktorm.database.Database import org.koin.dsl.bind import org.koin.dsl.module import org.koin.dsl.onClose import javax.sql.DataSource 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 migrationModule = module { single { DbMigrationsImpl(get(), get()) } } val persistanceModule = module { single { NoteConverterImpl() } single { UserConverterImpl() } single { UserRepositoryImpl(get(), get()) } single { NoteRepositoryImpl(get(), get()) } single { hikariDataSource(get()) } bind DataSource::class onClose { it?.close() } single { get().migrate() Database.connect(get()) } single { DbHealthCheckImpl(get(), get()) } }