87 lines
2.7 KiB
JavaScript
Executable file
87 lines
2.7 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
/**
|
|
* Script para ejecutar la migración 003: Content Items Schema
|
|
*
|
|
* Ejecuta: backend/database/migrations/003_create_content_items_schema.sql
|
|
*/
|
|
|
|
import { readFile } from 'fs/promises';
|
|
import { join, dirname } from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
import { query } from '../config/database.js';
|
|
import 'dotenv/config';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = dirname(__filename);
|
|
const migrationPath = join(__dirname, '../database/migrations/003_create_content_items_schema.sql');
|
|
|
|
async function runMigration() {
|
|
try {
|
|
console.log('🔧 Ejecutando migración: Content Items Schema (tes_content)\n');
|
|
|
|
// Leer el SQL
|
|
const migrationSql = await readFile(migrationPath, 'utf-8');
|
|
|
|
console.log('📝 Ejecutando SQL...\n');
|
|
|
|
try {
|
|
// Ejecutar todo el SQL
|
|
await query(migrationSql);
|
|
console.log('✅ Migración ejecutada correctamente\n');
|
|
} catch (error) {
|
|
// Ignorar errores de "ya existe"
|
|
if (error.code === '42P07' || error.code === '42710' || error.message.includes('already exists')) {
|
|
console.log('⚠️ Algunos objetos ya existen (esto es normal si ya se ejecutó antes)\n');
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// Verificar tablas creadas
|
|
console.log('📊 Verificando tablas creadas...');
|
|
const tablesResult = await query(`
|
|
SELECT table_name
|
|
FROM information_schema.tables
|
|
WHERE table_schema = 'tes_content'
|
|
AND table_name IN ('content_items', 'content_versions', 'media_resources', 'content_resource_associations', 'audit_logs')
|
|
ORDER BY table_name
|
|
`);
|
|
|
|
if (tablesResult.rows.length > 0) {
|
|
console.log(' Tablas encontradas:');
|
|
tablesResult.rows.forEach(row => {
|
|
console.log(` ✅ ${row.table_name}`);
|
|
});
|
|
} else {
|
|
console.log(' ⚠️ No se encontraron las tablas esperadas');
|
|
}
|
|
|
|
// Verificar enums creados
|
|
console.log('\n📊 Verificando enums creados...');
|
|
const enumsResult = await query(`
|
|
SELECT typname
|
|
FROM pg_type
|
|
WHERE typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'tes_content')
|
|
AND typname IN ('content_status', 'content_priority')
|
|
ORDER BY typname
|
|
`);
|
|
|
|
if (enumsResult.rows.length > 0) {
|
|
console.log(' Enums encontrados:');
|
|
enumsResult.rows.forEach(row => {
|
|
console.log(` ✅ ${row.typname}`);
|
|
});
|
|
}
|
|
|
|
console.log('\n✅ Migración del esquema de content_items completada!\n');
|
|
|
|
} catch (error) {
|
|
console.error('❌ Error ejecutando migración:', error.message);
|
|
console.error(error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
runMigration();
|
|
|