101 lines
4.5 KiB
Kotlin
101 lines
4.5 KiB
Kotlin
package be.vandewalleh
|
|
|
|
import be.vandewalleh.auth.AuthenticationModule
|
|
import be.vandewalleh.auth.SimpleJWT
|
|
import be.vandewalleh.controllers.api.ApiNoteController
|
|
import be.vandewalleh.controllers.api.ApiTagController
|
|
import be.vandewalleh.controllers.api.ApiUserController
|
|
import be.vandewalleh.controllers.web.BaseController
|
|
import be.vandewalleh.controllers.web.NoteController
|
|
import be.vandewalleh.controllers.web.UserController
|
|
import be.vandewalleh.extensions.ApplicationBuilder
|
|
import be.vandewalleh.extensions.RoutingBuilder
|
|
import be.vandewalleh.factories.*
|
|
import be.vandewalleh.features.*
|
|
import be.vandewalleh.markdown.Markdown
|
|
import be.vandewalleh.repositories.NoteRepository
|
|
import be.vandewalleh.repositories.UserRepository
|
|
import be.vandewalleh.routing.api.ApiDocRoutes
|
|
import be.vandewalleh.routing.api.ApiNoteRoutes
|
|
import be.vandewalleh.routing.api.ApiTagRoutes
|
|
import be.vandewalleh.routing.api.ApiUserRoutes
|
|
import be.vandewalleh.routing.web.BaseRoutes
|
|
import be.vandewalleh.routing.web.NoteRoutes
|
|
import be.vandewalleh.routing.web.StaticRoutes
|
|
import be.vandewalleh.routing.web.UserRoutes
|
|
import com.soywiz.korte.TemplateProvider
|
|
import com.soywiz.korte.Templates
|
|
import io.ktor.features.*
|
|
import org.kodein.di.*
|
|
import org.kodein.di.DI
|
|
import org.slf4j.LoggerFactory
|
|
|
|
val mainModule = DI.Module("main") {
|
|
bind() from singleton { NoteRepository(instance()) }
|
|
bind() from singleton { UserRepository(instance(), instance()) }
|
|
|
|
bind() from singleton { configurationFactory() }
|
|
|
|
bind() from setBinding<ApplicationBuilder>()
|
|
bind<ApplicationBuilder>().inSet() with singleton { ErrorHandler(instance()) }
|
|
bind<ApplicationBuilder>().inSet() with singleton { ContentNegotiationFeature() }
|
|
bind<ApplicationBuilder>().inSet() with singleton { CorsFeature(instance<Config>().server.cors) }
|
|
bind<ApplicationBuilder>().inSet() with singleton { AuthenticationModule(instance(tag = "auth")) }
|
|
bind<ApplicationBuilder>().inSet() with singleton { MigrationHook(instance()) }
|
|
bind<ApplicationBuilder>().inSet() with singleton { ShutdownDatabaseConnection(instance()) }
|
|
bind<ApplicationBuilder>().inSet() with singleton { SecurityReport() }
|
|
bind<ApplicationBuilder>().inSet() with singleton { CachingHeadersFeature() }
|
|
bind<ApplicationBuilder>().inSet() with singleton { CompressionFeature() }
|
|
bind<ApplicationBuilder>().inSet() with singleton { CallLoggingFeature() }
|
|
|
|
bind() from setBinding<RoutingBuilder>()
|
|
bind<RoutingBuilder>().inSet() with singleton { ApiDocRoutes() }
|
|
bind<RoutingBuilder>().inSet() with singleton { ApiNoteRoutes(instance()) }
|
|
bind<RoutingBuilder>().inSet() with singleton { ApiTagRoutes(instance()) }
|
|
bind<RoutingBuilder>().inSet() with singleton { ApiUserRoutes(instance()) }
|
|
|
|
// API
|
|
bind() from singleton { ApiNoteController(instance(), instance()) }
|
|
bind() from singleton { ApiTagController(instance()) }
|
|
bind() from singleton {
|
|
ApiUserController(
|
|
userRepository = instance(),
|
|
authJWT = instance(tag = "auth"),
|
|
refreshJWT = instance(tag = "refresh"),
|
|
passwordHash = instance()
|
|
)
|
|
}
|
|
|
|
// web
|
|
bind<RoutingBuilder>().inSet() with singleton { BaseRoutes(instance()) }
|
|
bind<RoutingBuilder>().inSet() with singleton { UserRoutes(instance()) }
|
|
bind<RoutingBuilder>().inSet() with singleton { NoteRoutes(instance()) }
|
|
bind<RoutingBuilder>().inSet() with singleton { StaticRoutes() }
|
|
|
|
bind() from singleton { NoteController(instance(), instance(), instance()) }
|
|
bind() from singleton { BaseController(instance()) }
|
|
bind() from singleton {
|
|
UserController(
|
|
userRepository = instance(),
|
|
authJWT = instance(tag = "auth"),
|
|
templates = instance(),
|
|
passwordHash = instance()
|
|
)
|
|
}
|
|
|
|
bind<TemplateProvider>() with singleton { ResourceTemplateProvider() }
|
|
bind<Templates>() with singleton { templatesFactory(instance()) }
|
|
|
|
bind<SimpleJWT>(tag = "auth") with singleton { simpleJwtFactory(instance<Config>().jwt.auth) }
|
|
bind<SimpleJWT>(tag = "refresh") with singleton { simpleJwtFactory(instance<Config>().jwt.refresh) }
|
|
|
|
bind() from singleton { LoggerFactory.getLogger("Application") }
|
|
bind() from singleton { dataSourceFactory(instance<Config>().database) }
|
|
bind() from singleton { databaseFactory(instance()) }
|
|
bind() from singleton { Migration(instance()) }
|
|
|
|
bind<PasswordHash>() with singleton { BcryptPasswordHash() }
|
|
|
|
bind() from singleton { Markdown() }
|
|
}
|