64 lines
2.2 KiB
JavaScript
64 lines
2.2 KiB
JavaScript
|
|
// Migration: Add Jira API sync columns to jira_tickets table
|
||
|
|
// Adds jira_id, jira_status, and last_synced_at columns to support
|
||
|
|
// live synchronization with Jira Data Center REST API.
|
||
|
|
// Idempotent — safe to run multiple times.
|
||
|
|
|
||
|
|
const sqlite3 = require('sqlite3').verbose();
|
||
|
|
const path = require('path');
|
||
|
|
|
||
|
|
const dbPath = path.join(__dirname, '..', 'cve_database.db');
|
||
|
|
const db = new sqlite3.Database(dbPath);
|
||
|
|
|
||
|
|
console.log('Starting Jira sync columns migration...');
|
||
|
|
|
||
|
|
const newColumns = [
|
||
|
|
{ name: 'jira_id', sql: 'ALTER TABLE jira_tickets ADD COLUMN jira_id TEXT' },
|
||
|
|
{ name: 'jira_status', sql: 'ALTER TABLE jira_tickets ADD COLUMN jira_status TEXT' },
|
||
|
|
{ name: 'last_synced_at', sql: 'ALTER TABLE jira_tickets ADD COLUMN last_synced_at DATETIME' }
|
||
|
|
];
|
||
|
|
|
||
|
|
db.all('PRAGMA table_info(jira_tickets)', (err, columns) => {
|
||
|
|
if (err) {
|
||
|
|
console.error('Could not inspect jira_tickets:', err.message);
|
||
|
|
console.log('Run migrate_jira_tickets.js first to create the table.');
|
||
|
|
db.close();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const existingNames = new Set(columns.map(c => c.name));
|
||
|
|
let pending = 0;
|
||
|
|
|
||
|
|
db.serialize(() => {
|
||
|
|
newColumns.forEach(({ name, sql }) => {
|
||
|
|
if (existingNames.has(name)) {
|
||
|
|
console.log(`✓ jira_tickets.${name} already exists — skipping`);
|
||
|
|
} else {
|
||
|
|
pending++;
|
||
|
|
db.run(sql, (runErr) => {
|
||
|
|
if (runErr) {
|
||
|
|
console.error(`✗ Failed to add ${name}:`, runErr.message);
|
||
|
|
} else {
|
||
|
|
console.log(`✓ Added jira_tickets.${name}`);
|
||
|
|
}
|
||
|
|
pending--;
|
||
|
|
if (pending === 0) finish();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// Create index on jira_id for lookups
|
||
|
|
db.run('CREATE INDEX IF NOT EXISTS idx_jira_tickets_jira_id ON jira_tickets(jira_id)', (idxErr) => {
|
||
|
|
if (idxErr) console.error('Index error:', idxErr.message);
|
||
|
|
else console.log('✓ jira_id index created');
|
||
|
|
});
|
||
|
|
|
||
|
|
if (pending === 0) finish();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
function finish() {
|
||
|
|
db.close(() => {
|
||
|
|
console.log('Migration complete!');
|
||
|
|
});
|
||
|
|
}
|