SimpleNotes/api/src/NotesApplication.kt
2020-04-20 19:21:52 +02:00

60 lines
1.6 KiB
Kotlin

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<Migration>() with singleton { Migration(this.kodein) }
bind<Database>() with singleton { Database.Companion.connect(this.instance<DataSource>()) }
}
features()
log.debug(kodein.container.tree.bindings.description())
val migration by kodein.instance<Migration>()
migration.migrate()
routing {
registerRoutes(kodein)
}
val root = feature(Routing)
val allRoutes = allRoutes(root)
allRoutes.forEach {
println(it.toString())
}
}
fun allRoutes(root: Route): List<Route> {
return listOf(root) + root.children.flatMap { allRoutes(it) }
}