SimpleNotes/api/src/NotesApplication.kt

64 lines
1.6 KiB
Kotlin

package be.vandewalleh
import be.vandewalleh.features.Config
import be.vandewalleh.features.configurationModule
import be.vandewalleh.features.loadFeatures
import be.vandewalleh.migrations.Migration
import be.vandewalleh.routing.registerRoutes
import be.vandewalleh.services.serviceModule
import io.ktor.application.*
import io.ktor.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
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 org.slf4j.Logger
import org.slf4j.LoggerFactory
import javax.sql.DataSource
fun main() {
val kodein = Kodein{
import(mainModule)
}
val config by kodein.instance<Config>()
val logger by kodein.instance<Logger>()
logger.info("Running application with configuration $config")
logger.debug("Kodein bindings\n${kodein.container.tree.bindings.description()}")
val migration by kodein.instance<Migration>()
migration.migrate()
serve(kodein)
}
fun serve(kodein: Kodein) {
val config by kodein.instance<Config>()
val logger by kodein.instance<Logger>()
val env = applicationEngineEnvironment {
module {
module(kodein)
}
log = logger
connector {
host = config.server.host
port = config.server.port
}
}
embeddedServer(Netty, env).start(wait = true)
}
fun Application.module(kodein: Kodein) {
loadFeatures(kodein)
routing {
registerRoutes(kodein)
}
}