|
| 1 | +package com.cosmotech.common.postgres |
| 2 | + |
| 3 | +import org.springframework.beans.factory.annotation.Qualifier |
| 4 | +import org.springframework.beans.factory.annotation.Value |
| 5 | +import org.springframework.context.annotation.Bean |
| 6 | +import org.springframework.context.annotation.Configuration |
| 7 | +import org.springframework.jdbc.core.JdbcTemplate |
| 8 | +import org.springframework.jdbc.datasource.DriverManagerDataSource |
| 9 | +import javax.sql.DataSource |
| 10 | + |
| 11 | +@Configuration |
| 12 | +class PostgresConfiguration { |
| 13 | + @Value("\${csm.platform.internalResultServices.storage.admin.username}") |
| 14 | + private lateinit var adminStorageUsername: String |
| 15 | + @Value("\${csm.platform.internalResultServices.storage.admin.password}") |
| 16 | + private lateinit var adminStoragePassword: String |
| 17 | + @Value("\${csm.platform.internalResultServices.storage.host}") private lateinit var host: String |
| 18 | + @Value("\${csm.platform.internalResultServices.storage.port}") private lateinit var port: String |
| 19 | + @Value("\${csm.platform.internalResultServices.storage.db.name}") private lateinit var dbName: String |
| 20 | + @Value("\${csm.platform.internalResultServices.storage.db.schema}") private lateinit var schema: String |
| 21 | + |
| 22 | + private val jdbcdriverClass = "org.postgresql.Driver" |
| 23 | + |
| 24 | + @Bean |
| 25 | + fun adminDatasource(): DriverManagerDataSource { |
| 26 | + val dataSource = |
| 27 | + DriverManagerDataSource( |
| 28 | + "jdbc:postgresql://$host:$port/$dbName", adminStorageUsername, adminStoragePassword) |
| 29 | + dataSource.setDriverClassName(jdbcdriverClass) |
| 30 | + return dataSource |
| 31 | + } |
| 32 | + |
| 33 | + @Bean |
| 34 | + fun adminJdbcTemplate( |
| 35 | + @Qualifier("adminDatasource") dataSource: DataSource |
| 36 | + ): JdbcTemplate { |
| 37 | + return JdbcTemplate(dataSource) |
| 38 | + } |
| 39 | +} |
| 40 | + |
| 41 | +fun JdbcTemplate.existDB(name: String): Boolean { |
| 42 | + return this.queryForList("SELECT * FROM pg_catalog.pg_database WHERE datname='$name'").size == 1 |
| 43 | +} |
| 44 | + |
| 45 | +fun JdbcTemplate.existTable(name: String): Boolean { |
| 46 | + return this.queryForList( |
| 47 | + "SELECT * FROM information_schema.tables " + "WHERE table_name ilike '${name}'") |
| 48 | + .size >= 1 |
| 49 | +} |
| 50 | + |
| 51 | +fun String.toDataTableName(isProbeData: Boolean): String = |
| 52 | + (if (isProbeData) "P_$this" else "CD_$this").lowercase() |
| 53 | + |
| 54 | +fun JdbcTemplate.createDB(name: String, comment: String? = null): String { |
| 55 | + this.execute("CREATE DATABASE \"$name\"") |
| 56 | + if (comment != null) this.execute("COMMENT ON DATABASE \"$name\" IS '$comment'") |
| 57 | + return name |
| 58 | +} |
| 59 | + |
| 60 | +fun JdbcTemplate.dropDB(name: String) { |
| 61 | + if (this.existDB(name)) this.execute("DROP DATABASE \"$name\"") |
| 62 | +} |
0 commit comments