codigo0/backend/scripts/db-create.js

95 lines
2.6 KiB
JavaScript
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* Script para crear la base de datos y ejecutar migraciones
*
* Uso: node scripts/db-create.js
*
* IMPORTANTE: Requiere PostgreSQL instalado y configurado
*/
import { readFile } from 'fs/promises';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
import pg from 'pg';
import dotenv from 'dotenv';
dotenv.config();
const { Client } = pg;
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const projectRoot = join(__dirname, '..', '..');
async function main() {
const client = new Client({
host: process.env.DB_HOST || 'localhost',
port: parseInt(process.env.DB_PORT || '5432', 10),
database: 'postgres', // Conectar a postgres para crear la BD
user: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || '',
});
try {
await client.connect();
console.log('✅ Conectado a PostgreSQL');
// Crear base de datos si no existe
const dbName = process.env.DB_NAME || 'emerges_tes';
const dbExists = await client.query(
`SELECT 1 FROM pg_database WHERE datname = $1`,
[dbName]
);
if (dbExists.rows.length === 0) {
await client.query(`CREATE DATABASE ${dbName}`);
console.log(`✅ Base de datos '${dbName}' creada`);
} else {
console.log(` Base de datos '${dbName}' ya existe`);
}
await client.end();
// Conectar a la base de datos creada
const dbClient = new Client({
host: process.env.DB_HOST || 'localhost',
port: parseInt(process.env.DB_PORT || '5432', 10),
database: dbName,
user: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || '',
});
await dbClient.connect();
console.log(`✅ Conectado a base de datos '${dbName}'`);
// Ejecutar migraciones
console.log('\n📦 Ejecutando migraciones...\n');
// Migración 001: Crear esquema
const migration001 = await readFile(
join(projectRoot, 'database', 'migrations', '001_create_schema.sql'),
'utf-8'
);
await dbClient.query(migration001);
console.log('✅ Migración 001: Esquema creado');
// Migración 002: Funciones y triggers
const migration002 = await readFile(
join(projectRoot, 'database', 'migrations', '002_create_functions.sql'),
'utf-8'
);
await dbClient.query(migration002);
console.log('✅ Migración 002: Funciones y triggers creados');
await dbClient.end();
console.log('\n🎉 Base de datos configurada correctamente\n');
} catch (error) {
console.error('❌ Error:', error.message);
process.exit(1);
}
}
main();