Files
api_builder/backend/src/config/database.ts
eshmeshek c879d9e98c modified: Dockerfile
modified:   backend/src/config/database.ts
2025-12-18 15:00:06 +03:00

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;
}
};