56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { Pool } from 'pg';
|
|
import { config } from './environment';
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
// Main database pool for KIS API Builder metadata
|
|
export const mainPool = new Pool({
|
|
host: config.mainDatabase.host,
|
|
port: config.mainDatabase.port,
|
|
database: config.mainDatabase.database,
|
|
user: config.mainDatabase.user,
|
|
password: config.mainDatabase.password,
|
|
max: 20,
|
|
idleTimeoutMillis: 30000,
|
|
connectionTimeoutMillis: 2000,
|
|
});
|
|
|
|
mainPool.on('error', (err) => {
|
|
console.error('Unexpected error on idle client', err);
|
|
process.exit(-1);
|
|
});
|
|
|
|
export const initializeDatabase = async () => {
|
|
try {
|
|
const client = await mainPool.connect();
|
|
console.log('✅ Connected to main database successfully');
|
|
client.release();
|
|
} catch (error) {
|
|
console.error('❌ Failed to connect to database:', error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
export const runMigrations = async () => {
|
|
console.log('🔄 Running migrations...');
|
|
try {
|
|
// In compiled JS, __dirname is /app/backend/dist/config
|
|
// We need to go up to /app/backend and then into src/migrations
|
|
const migrationsDir = path.join(__dirname, '../../src/migrations');
|
|
const files = fs.readdirSync(migrationsDir)
|
|
.filter(f => f.endsWith('.sql'))
|
|
.sort();
|
|
|
|
for (const file of files) {
|
|
console.log(` 📄 ${file}`);
|
|
const sql = fs.readFileSync(path.join(migrationsDir, file), 'utf-8');
|
|
await mainPool.query(sql);
|
|
}
|
|
|
|
console.log('✅ Migrations completed');
|
|
} catch (error) {
|
|
console.error('❌ Migration failed:', error);
|
|
throw error;
|
|
}
|
|
};
|