63 lines
2.2 KiB
Kotlin
63 lines
2.2 KiB
Kotlin
package at.mocode.gateway.config
|
|
|
|
import io.ktor.server.application.*
|
|
import org.jetbrains.exposed.sql.Database
|
|
import org.jetbrains.exposed.sql.SchemaUtils
|
|
import org.jetbrains.exposed.sql.transactions.transaction
|
|
import org.slf4j.LoggerFactory
|
|
|
|
/**
|
|
* Database configuration for the API Gateway.
|
|
*
|
|
* Sets up database connections and schema initialization for all bounded contexts.
|
|
*/
|
|
fun Application.configureDatabase() {
|
|
val log = LoggerFactory.getLogger("DatabaseConfig")
|
|
val databaseUrl = environment.config.propertyOrNull("database.url")?.getString()
|
|
?: "jdbc:postgresql://localhost:5432/meldestelle"
|
|
val databaseUser = environment.config.propertyOrNull("database.user")?.getString()
|
|
?: "meldestelle_user"
|
|
val databasePassword = environment.config.propertyOrNull("database.password")?.getString()
|
|
?: "meldestelle_password"
|
|
|
|
// Initialize database connection
|
|
Database.connect(
|
|
url = databaseUrl,
|
|
driver = "org.postgresql.Driver",
|
|
user = databaseUser,
|
|
password = databasePassword
|
|
)
|
|
|
|
// Initialize database schemas for all contexts
|
|
transaction {
|
|
// Import table definitions from all contexts
|
|
try {
|
|
// Master Data Context tables
|
|
SchemaUtils.createMissingTablesAndColumns(
|
|
at.mocode.masterdata.infrastructure.repository.LandTable
|
|
)
|
|
|
|
// Member Management Context tables
|
|
SchemaUtils.createMissingTablesAndColumns(
|
|
at.mocode.members.infrastructure.repository.PersonTable,
|
|
at.mocode.members.infrastructure.repository.VereinTable
|
|
)
|
|
|
|
// Horse Registry Context tables
|
|
SchemaUtils.createMissingTablesAndColumns(
|
|
at.mocode.horses.infrastructure.repository.HorseTable
|
|
)
|
|
|
|
// Event Management Context tables
|
|
SchemaUtils.createMissingTablesAndColumns(
|
|
at.mocode.events.infrastructure.repository.VeranstaltungTable
|
|
)
|
|
|
|
log.info("Database schemas initialized successfully")
|
|
} catch (e: Exception) {
|
|
log.error("Failed to initialize database schemas: ${e.message}")
|
|
// In production, you might want to fail fast here
|
|
}
|
|
}
|
|
}
|