fix: upgrade current user snapshot columns portably

master
chenyuan 4 weeks ago
parent 8c49659d68
commit 17e2f3a59b

@ -0,0 +1,43 @@
package com.yau.digitalrmb.identity.infrastructure.persistence;
import javax.annotation.PostConstruct;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class PlatformUserSnapshotSchemaUpgrade {
private static final String[][] PROFILE_COLUMNS = {
{"school_id", "VARCHAR(64) NULL"},
{"school_name", "VARCHAR(128) NULL"},
{"college_id", "VARCHAR(64) NULL"},
{"college_name", "VARCHAR(128) NULL"},
{"major_id", "VARCHAR(64) NULL"},
{"major_name", "VARCHAR(128) NULL"},
{"role_id", "BIGINT NULL"},
{"class_id", "VARCHAR(64) NULL"},
{"class_name", "VARCHAR(128) NULL"},
{"student_id", "VARCHAR(64) NULL"}
};
private final JdbcTemplate jdbcTemplate;
public PlatformUserSnapshotSchemaUpgrade(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@PostConstruct
public void ensureColumns() {
for (String[] column : PROFILE_COLUMNS) {
if (!columnExists(column[0])) {
jdbcTemplate.execute("ALTER TABLE platform_user_snapshot ADD COLUMN " + column[0] + " " + column[1]);
}
}
}
private boolean columnExists(String columnName) {
Integer count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS "
+ "WHERE LOWER(TABLE_NAME) = 'platform_user_snapshot' AND LOWER(COLUMN_NAME) = ?", Integer.class,
columnName);
return count != null && count > 0;
}
}

@ -47,17 +47,6 @@ CREATE TABLE IF NOT EXISTS platform_user_snapshot (
student_id VARCHAR(64) NULL student_id VARCHAR(64) NULL
); );
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS school_id VARCHAR(64) NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS school_name VARCHAR(128) NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS college_id VARCHAR(64) NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS college_name VARCHAR(128) NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS major_id VARCHAR(64) NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS major_name VARCHAR(128) NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS role_id BIGINT NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS class_id VARCHAR(64) NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS class_name VARCHAR(128) NULL;
ALTER TABLE platform_user_snapshot ADD COLUMN IF NOT EXISTS student_id VARCHAR(64) NULL;
CREATE TABLE IF NOT EXISTS auth_login_exchange_code ( CREATE TABLE IF NOT EXISTS auth_login_exchange_code (
code_hash CHAR(64) PRIMARY KEY, code_hash CHAR(64) PRIMARY KEY,
platform_user_id BIGINT NOT NULL, platform_user_id BIGINT NOT NULL,

@ -0,0 +1,28 @@
package com.yau.digitalrmb.identity;
import com.yau.digitalrmb.identity.infrastructure.persistence.PlatformUserSnapshotSchemaUpgrade;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
@ActiveProfiles("test")
class PlatformUserSnapshotSchemaUpgradeTest {
@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private PlatformUserSnapshotSchemaUpgrade schemaUpgrade;
@Test
void restoresMissingProfileColumnWithPortableAlterStatement() {
jdbcTemplate.execute("ALTER TABLE platform_user_snapshot DROP COLUMN student_id");
schemaUpgrade.ensureColumns();
Integer count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS "
+ "WHERE LOWER(TABLE_NAME) = 'platform_user_snapshot' AND LOWER(COLUMN_NAME) = 'student_id'", Integer.class);
assertThat(count).isEqualTo(1);
}
}
Loading…
Cancel
Save