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