diff --git a/api/pom.xml b/api/pom.xml index ef64834..d24189e 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -119,7 +119,7 @@ org.flywaydb flyway-core - ${flyway_version} + 6.3.3 diff --git a/api/src/NotesApplication.kt b/api/src/NotesApplication.kt index 19d41f8..e862227 100644 --- a/api/src/NotesApplication.kt +++ b/api/src/NotesApplication.kt @@ -2,9 +2,11 @@ package be.vandewalleh import be.vandewalleh.controllers.KodeinController import be.vandewalleh.controllers.controllerModule +import be.vandewalleh.features.Feature import be.vandewalleh.features.configurationFeature import be.vandewalleh.features.configurationModule import be.vandewalleh.features.features +import be.vandewalleh.migrations.Migration import com.fasterxml.jackson.databind.SerializationFeature import io.ktor.application.Application import io.ktor.application.install @@ -16,7 +18,9 @@ import io.ktor.locations.Locations import io.ktor.routing.routing 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 @@ -28,10 +32,15 @@ fun Application.module() { kodein = Kodein { import(controllerModule) import(configurationModule) + + bind() with singleton { Migration(this.kodein) } } log.debug(kodein.container.tree.bindings.description()) + val feature: Feature by kodein.instance() + feature.execute() + val controllers: Set by kodein.instance() routing { diff --git a/api/src/features/Features.kt b/api/src/features/Features.kt index 0767e42..3003579 100644 --- a/api/src/features/Features.kt +++ b/api/src/features/Features.kt @@ -1,10 +1,16 @@ package be.vandewalleh.features import io.ktor.application.Application +import org.kodein.di.Kodein +import org.kodein.di.KodeinAware fun Application.features() { locationFeature() corsFeature() contentNegotiationFeature() configurationFeature() +} + +abstract class Feature(override val kodein: Kodein) : KodeinAware { + abstract fun execute(): Unit } \ No newline at end of file diff --git a/api/src/migrations/Migration.kt b/api/src/migrations/Migration.kt new file mode 100644 index 0000000..e661262 --- /dev/null +++ b/api/src/migrations/Migration.kt @@ -0,0 +1,20 @@ +package be.vandewalleh.migrations + +import be.vandewalleh.features.Feature +import org.flywaydb.core.Flyway +import org.kodein.di.Kodein +import org.kodein.di.generic.instance +import javax.sql.DataSource + +class Migration(override val kodein: Kodein) : Feature(kodein) { + + override fun execute() { + val dataSource by instance() + val flyway = Flyway.configure() + .dataSource(dataSource) + .baselineOnMigrate(true) + .load() + flyway.migrate() + } + +} \ No newline at end of file