package com.android.trisolarisserver.config import org.springframework.jdbc.core.JdbcTemplate import org.springframework.stereotype.Component @Component class PayuPaymentLinkSettingsSchemaFix( private val jdbcTemplate: JdbcTemplate ) : PostgresSchemaFix(jdbcTemplate) { override fun runPostgres(jdbcTemplate: JdbcTemplate) { val hasTable = jdbcTemplate.queryForObject( """ select count(*) from information_schema.tables where table_name = 'payu_payment_link_settings' """.trimIndent(), Int::class.java ) ?: 0 if (hasTable == 0) { logger.info("Creating payu_payment_link_settings table") jdbcTemplate.execute( """ create table payu_payment_link_settings ( id uuid primary key, property_id uuid not null unique references property(id) on delete cascade, merchant_id text not null, client_id text, client_secret text, access_token text, token_expires_at timestamptz, is_test boolean not null default false, updated_at timestamptz not null ) """.trimIndent() ) } ensureColumn("payu_payment_link_settings", "client_id", "text") ensureColumn("payu_payment_link_settings", "client_secret", "text") ensureColumn("payu_payment_link_settings", "access_token", "text") ensureColumn("payu_payment_link_settings", "token_expires_at", "timestamptz") jdbcTemplate.execute("alter table payu_payment_link_settings alter column access_token drop not null") } private fun ensureColumn(table: String, column: String, type: String) { val exists = jdbcTemplate.queryForObject( """ select count(*) from information_schema.columns where table_name = '$table' and column_name = '$column' """.trimIndent(), Int::class.java ) ?: 0 if (exists == 0) { logger.info("Adding $table.$column column") jdbcTemplate.execute("alter table $table add column $column $type") } } }