diff --git a/scripts/init-db.js b/scripts/init-db.js index a71997a..d897401 100644 --- a/scripts/init-db.js +++ b/scripts/init-db.js @@ -1,6 +1,8 @@ #!/usr/bin/env node const { Pool } = require('pg') +const fs = require('fs') +const path = require('path') const DB_HOST = process.env.DB_HOST || 'localhost' const DB_PORT = parseInt(process.env.DB_PORT || '5432', 10) @@ -33,9 +35,38 @@ async function main() { } finally { await admin.end().catch(() => {}) } + + // Connect to the target DB and apply schema + const db = new Pool({ + host: DB_HOST, + port: DB_PORT, + database: DB_NAME, + user: DB_USER, + password: DB_PASSWORD, + }) + + try { + const schemaPath = path.join(__dirname, '..', 'src', 'lib', 'database', 'schema.sql') + const schema = fs.readFileSync(schemaPath, 'utf8') + console.log('🔧 Applying schema...') + await db.query(schema) + console.log('✅ Schema applied') + } catch (err) { + // 42P07 duplicate_table, 42710 duplicate_object, 23505 unique_violation (for seed inserts) + const ignorable = new Set(['42P07', '42710', '23505']) + if (err && ignorable.has(err.code)) { + console.log('â„šī¸ Schema objects already exist; skipping') + } else { + console.error('❌ Schema apply error:', err) + process.exitCode = 1 + } + } finally { + await db.end().catch(() => {}) + } } main().catch((e) => { console.error('❌ init:db failed:', e) process.exit(1) }) +