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.Application import io.ktor.application.feature import io.ktor.application.log import io.ktor.routing.Route import io.ktor.routing.Routing import io.ktor.routing.RoutingPath.Companion.root import io.ktor.routing.routing import me.liuwj.ktorm.database.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) } }