plugins { alias(libs.plugins.kotlinJvm) alias(libs.plugins.kotlinSerialization) alias(libs.plugins.ktor) alias(libs.plugins.flywayPlugin) application id("recipe.quality") } group = "dev.ulfrx.recipe" version = "1.0.0" kotlin { jvmToolchain(21) compilerOptions { allWarningsAsErrors.set(true) } } tasks.test { useJUnitPlatform() } application { mainClass.set("dev.ulfrx.recipe.ApplicationKt") val isDevelopment: Boolean = project.ext.has("development") applicationDefaultJvmArgs = listOf("-Dio.ktor.development=$isDevelopment") } dependencies { implementation(libs.ktor.serverCore) implementation(libs.ktor.serverNetty) implementation(libs.ktor.serverContentNegotiation) implementation(libs.ktor.serializationKotlinxJson) implementation(libs.kotlinx.serializationJson) implementation(libs.logback) implementation(libs.flyway.core) implementation(libs.flyway.database.postgresql) implementation(libs.postgresql) implementation(projects.shared) implementation(libs.ktor.serverAuth) implementation(libs.ktor.serverAuthJwt) implementation(libs.ktor.serverCallLogging) implementation(libs.ktor.serverStatusPages) // Phase 2: Exposed DSL + Hikari connection pool (D-26). implementation(libs.exposed.core) implementation(libs.exposed.jdbc) implementation(libs.exposed.java.time) implementation(libs.hikari) testImplementation(libs.ktor.serverTestHost) testImplementation(libs.kotlin.testJunit5) testImplementation(libs.testcontainers.postgresql) testImplementation(libs.testcontainers.junit.jupiter) } flyway { url = System.getenv("DATABASE_URL") ?: "jdbc:postgresql://localhost:5432/recipe" user = System.getenv("DATABASE_USER") ?: "recipe" password = System.getenv("DATABASE_PASSWORD") ?: "recipe" locations = arrayOf("classpath:db/migration") cleanDisabled = true baselineOnMigrate = true validateOnMigrate = true }