package be.vandewalleh import be.vandewalleh.features.configurationFeature import be.vandewalleh.features.configurationModule import be.vandewalleh.features.features import be.vandewalleh.migrations.Migration import be.vandewalleh.routing.registerRoutes import be.vandewalleh.services.serviceModule import io.ktor.application.* import io.ktor.routing.* import me.liuwj.ktorm.database.* import org.kodein.di.Kodein import org.kodein.di.description import org.kodein.di.generic.bind import org.kodein.di.generic.instance import org.kodein.di.generic.singleton import javax.sql.DataSource lateinit var kodein: Kodein @Suppress("unused") // Referenced in application.conf fun Application.module() { // must be first to be loaded configurationFeature() kodein = Kodein { import(configurationModule) import(serviceModule) bind() with singleton { Migration(this.kodein) } bind() with singleton { Database.Companion.connect(this.instance()) } } features() log.debug(kodein.container.tree.bindings.description()) val migration by kodein.instance() migration.migrate() routing { registerRoutes(kodein) } val root = feature(Routing) val allRoutes = allRoutes(root) allRoutes.forEach { println(it.toString()) } } fun allRoutes(root: Route): List { return listOf(root) + root.children.flatMap { allRoutes(it) } }