66 lines
2.5 KiB
JavaScript
66 lines
2.5 KiB
JavaScript
|
|
// Migration: Add multi-item Jira ticket junction table
|
||
|
|
// - Creates jira_ticket_queue_items table linking jira_tickets to ivanti_todo_queue items
|
||
|
|
// - Adds UNIQUE constraint on (jira_ticket_id, queue_item_id)
|
||
|
|
// - Adds indexes on queue_item_id and jira_ticket_id
|
||
|
|
// Idempotent — safe to run multiple times.
|
||
|
|
const pool = require('../db');
|
||
|
|
|
||
|
|
async function run() {
|
||
|
|
console.log('Starting multi-item Jira ticket migration...');
|
||
|
|
|
||
|
|
// Verify prerequisite tables exist
|
||
|
|
const { rows: jiraTable } = await pool.query(`
|
||
|
|
SELECT 1 FROM information_schema.tables
|
||
|
|
WHERE table_schema = 'public' AND table_name = 'jira_tickets'
|
||
|
|
`);
|
||
|
|
if (jiraTable.length === 0) {
|
||
|
|
console.error('✗ jira_tickets table does not exist. Cannot proceed.');
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
console.log('✓ jira_tickets table exists');
|
||
|
|
|
||
|
|
const { rows: queueTable } = await pool.query(`
|
||
|
|
SELECT 1 FROM information_schema.tables
|
||
|
|
WHERE table_schema = 'public' AND table_name = 'ivanti_todo_queue'
|
||
|
|
`);
|
||
|
|
if (queueTable.length === 0) {
|
||
|
|
console.error('✗ ivanti_todo_queue table does not exist. Cannot proceed.');
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
console.log('✓ ivanti_todo_queue table exists');
|
||
|
|
|
||
|
|
// Create junction table
|
||
|
|
await pool.query(`
|
||
|
|
CREATE TABLE IF NOT EXISTS jira_ticket_queue_items (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
jira_ticket_id INTEGER NOT NULL REFERENCES jira_tickets(id),
|
||
|
|
queue_item_id INTEGER NOT NULL REFERENCES ivanti_todo_queue(id),
|
||
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
|
|
UNIQUE (jira_ticket_id, queue_item_id)
|
||
|
|
)
|
||
|
|
`);
|
||
|
|
console.log('✓ jira_ticket_queue_items table created (or already exists)');
|
||
|
|
|
||
|
|
// Add index on queue_item_id for efficient lookup of tickets by queue item
|
||
|
|
await pool.query(`
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_jira_ticket_queue_items_queue_item
|
||
|
|
ON jira_ticket_queue_items(queue_item_id)
|
||
|
|
`);
|
||
|
|
console.log('✓ queue_item_id index created (or already exists)');
|
||
|
|
|
||
|
|
// Add index on jira_ticket_id for efficient lookup of queue items by ticket
|
||
|
|
await pool.query(`
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_jira_ticket_queue_items_ticket
|
||
|
|
ON jira_ticket_queue_items(jira_ticket_id)
|
||
|
|
`);
|
||
|
|
console.log('✓ jira_ticket_id index created (or already exists)');
|
||
|
|
|
||
|
|
console.log('Migration complete.');
|
||
|
|
process.exit(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
run().catch(err => {
|
||
|
|
console.error('Migration failed:', err.message);
|
||
|
|
process.exit(1);
|
||
|
|
});
|