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() val logger by kodein.instance() logger.info("Running application with configuration $config") logger.debug("Kodein bindings\n${kodein.container.tree.bindings.description()}") val migration by kodein.instance() migration.migrate() serve(kodein) } fun serve(kodein: Kodein) { val config by kodein.instance() val logger by kodein.instance() 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) } }