35 lines
1.3 KiB
TypeScript
35 lines
1.3 KiB
TypeScript
import 'dotenv/config';
|
|
import db from '../src/database/models/index.js';
|
|
|
|
/**
|
|
* Aligns sla_tracking with SLATracking model (entity columns + metadata for reminder state).
|
|
* Safe to run multiple times (IF NOT EXISTS).
|
|
*/
|
|
async function migrate() {
|
|
const { sequelize } = db as any;
|
|
await sequelize.authenticate();
|
|
console.log('Database connected.');
|
|
|
|
const statements = [
|
|
`ALTER TABLE sla_tracking ADD COLUMN IF NOT EXISTS "entityType" VARCHAR(255)`,
|
|
`ALTER TABLE sla_tracking ADD COLUMN IF NOT EXISTS "entityId" UUID`,
|
|
`ALTER TABLE sla_tracking ADD COLUMN IF NOT EXISTS metadata JSONB DEFAULT '{}'::jsonb`,
|
|
// Backfill entity columns for legacy rows that only had applicationId
|
|
`UPDATE sla_tracking SET "entityType" = 'application' WHERE "entityType" IS NULL AND "applicationId" IS NOT NULL`,
|
|
`UPDATE sla_tracking SET "entityId" = "applicationId" WHERE "entityId" IS NULL AND "applicationId" IS NOT NULL`
|
|
];
|
|
|
|
for (const sql of statements) {
|
|
console.log('Running:', sql.slice(0, 80) + '...');
|
|
await sequelize.query(sql);
|
|
}
|
|
|
|
console.log('sla_tracking schema migration complete.');
|
|
await sequelize.close();
|
|
}
|
|
|
|
migrate().catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|