Add flyway config
This commit is contained in:
parent
b4760755fd
commit
fff27cf91b
7 changed files with 41 additions and 8 deletions
|
@ -48,7 +48,8 @@ dependencies {
|
|||
implementation("org.jetbrains.exposed:exposed-dao:$exposed_version")
|
||||
implementation("org.jetbrains.exposed:exposed-jdbc:$exposed_version")
|
||||
implementation("org.jetbrains.exposed:exposed-java-time:$exposed_version")
|
||||
implementation("com.impossibl.pgjdbc-ng:pgjdbc-ng:0.8.9")
|
||||
implementation("org.postgresql:postgresql:42.6.0")
|
||||
implementation("org.flywaydb:flyway-core:9.22.2")
|
||||
implementation("io.ktor:ktor-server-auth-jvm:2.3.4")
|
||||
|
||||
testImplementation("io.ktor:ktor-server-tests-jvm")
|
||||
|
|
|
@ -13,7 +13,7 @@ services:
|
|||
- db
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
image: postgres:15-alpine
|
||||
restart: always
|
||||
ports:
|
||||
- "5432:5432"
|
||||
|
|
|
@ -2,6 +2,7 @@ package io.github.wulkanowy.schools
|
|||
|
||||
import io.github.wulkanowy.schools.model.LoginEvents
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import org.flywaydb.core.Flyway
|
||||
import org.jetbrains.exposed.sql.Database
|
||||
import org.jetbrains.exposed.sql.SchemaUtils
|
||||
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
|
||||
|
@ -10,14 +11,27 @@ import org.jetbrains.exposed.sql.transactions.transaction
|
|||
object DatabaseFactory {
|
||||
fun init() {
|
||||
val host = System.getenv("DB_HOST")
|
||||
val user = "postgres"
|
||||
val password = "postgres"
|
||||
val database = Database.connect(
|
||||
url = "jdbc:pgsql://$host:5432/schools",
|
||||
driver = "com.impossibl.postgres.jdbc.PGDriver",
|
||||
user = "postgres",
|
||||
password = "postgres",
|
||||
url = "jdbc:postgresql://$host:5432/schools",
|
||||
driver = "org.postgresql.Driver",
|
||||
user = user,
|
||||
password = password,
|
||||
)
|
||||
|
||||
val flyway = Flyway.configure()
|
||||
.dataSource(database.url, user, password)
|
||||
.load()
|
||||
flyway.migrate()
|
||||
|
||||
transaction(database) {
|
||||
SchemaUtils.statementsRequiredToActualizeScheme(LoginEvents).let {
|
||||
if (it.isNotEmpty()) {
|
||||
println(it)
|
||||
error("There is/are ${it.size} migrations to run!")
|
||||
}
|
||||
}
|
||||
SchemaUtils.create(LoginEvents)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ class LoginEventDao {
|
|||
schoolAddress = row[LoginEvents.schoolAddress],
|
||||
scraperBaseUrl = row[LoginEvents.scraperBaseUrl],
|
||||
symbol = row[LoginEvents.symbol],
|
||||
schoolId = row[LoginEvents.schoolId],
|
||||
loginType = row[LoginEvents.loginType],
|
||||
uuid = row[LoginEvents.uuid],
|
||||
)
|
||||
|
@ -34,6 +35,7 @@ class LoginEventDao {
|
|||
it[schoolAddress] = event.schoolAddress
|
||||
it[scraperBaseUrl] = event.scraperBaseUrl
|
||||
it[symbol] = event.symbol
|
||||
it[schoolId] = event.schoolId
|
||||
it[loginType] = event.loginType
|
||||
it[timestamp] = Instant.now()
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package io.github.wulkanowy.schools.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.jetbrains.exposed.sql.*
|
||||
import org.jetbrains.exposed.sql.Table
|
||||
import org.jetbrains.exposed.sql.javatime.timestamp
|
||||
import java.util.UUID
|
||||
import java.util.*
|
||||
|
||||
@Serializable
|
||||
data class LoginEvent(
|
||||
|
@ -12,6 +12,7 @@ data class LoginEvent(
|
|||
val schoolAddress: String,
|
||||
val scraperBaseUrl: String,
|
||||
val symbol: String,
|
||||
val schoolId: String,
|
||||
val loginType: String,
|
||||
)
|
||||
|
||||
|
@ -23,6 +24,7 @@ object LoginEvents : Table() {
|
|||
val schoolAddress = varchar("schoolAddress", 256)
|
||||
val scraperBaseUrl = varchar("scraperBaseUrl", 128)
|
||||
val symbol = varchar("symbol", 64)
|
||||
val schoolId = varchar("schoolId", 16)
|
||||
val loginType = varchar("loginType", 32)
|
||||
|
||||
override val primaryKey = PrimaryKey(id)
|
||||
|
|
13
src/main/resources/db/migration/V1__Create_loginevents.sql
Normal file
13
src/main/resources/db/migration/V1__Create_loginevents.sql
Normal file
|
@ -0,0 +1,13 @@
|
|||
CREATE TABLE IF NOT EXISTS loginevents
|
||||
(
|
||||
id SERIAL PRIMARY KEY,
|
||||
uuid VARCHAR(36) NOT NULL,
|
||||
"timestamp" TIMESTAMP NOT NULL,
|
||||
"schoolName" VARCHAR(256) NOT NULL,
|
||||
"schoolAddress" VARCHAR(256) NOT NULL,
|
||||
"scraperBaseUrl" VARCHAR(128) NOT NULL,
|
||||
symbol VARCHAR(64) NOT NULL,
|
||||
"loginType" VARCHAR(32) NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE loginevents ADD CONSTRAINT "Unique event constraint" UNIQUE (uuid);
|
1
src/main/resources/db/migration/V2__Add_schoolId.sql
Normal file
1
src/main/resources/db/migration/V2__Add_schoolId.sql
Normal file
|
@ -0,0 +1 @@
|
|||
ALTER TABLE loginevents ADD "schoolId" VARCHAR(16) NOT NULL;
|
Loading…
Reference in a new issue