edumanagerpro2/manager/scratch/migrate_settings_to_sql.js

96 lines
4.5 KiB
JavaScript

import pg from 'pg';
const DATABASE_URL = 'postgresql://edumanager:EduManager2026!Seguro@150.230.87.131:5432/edumanager';
const pool = new pg.Pool({ connectionString: DATABASE_URL });
async function migrate() {
try {
console.log('--- MIGRATING CONFIGURAÇÕES TO SQL ---');
// 1. Get school data
const { rows: sdRows } = await pool.query('SELECT data FROM school_data WHERE id = 1');
if (sdRows.length === 0 || !sdRows[0].data) {
console.log('No legacy school_data found.');
return;
}
const data = sdRows[0].data;
console.log('Legacy school_data loaded successfully.');
// 2. Perform insert/sync into configuracoes table
if (data.profiles && Array.isArray(data.profiles) && data.profiles.length > 0) {
console.log(`Found ${data.profiles.length} profiles in legacy JSON. Syncing...`);
const profileIds = data.profiles.map(p => p.id).filter(Boolean);
await pool.query('DELETE FROM configuracoes WHERE id != ALL($1)', [profileIds]);
for (const p of data.profiles) {
if (!p.id || !p.name) continue;
await pool.query(
`INSERT INTO configuracoes (
id, nome, endereco, cidade, estado, cep, cnpj, telefone, email, tipo,
logo, evolution_api_url, evolution_instance_name, evolution_api_key,
message_templates, updated_at
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, NOW())
ON CONFLICT (id) DO UPDATE SET
nome = EXCLUDED.nome, endereco = EXCLUDED.endereco, cidade = EXCLUDED.cidade,
estado = EXCLUDED.estado, cep = EXCLUDED.cep, cnpj = EXCLUDED.cnpj,
telefone = EXCLUDED.telefone, email = EXCLUDED.email, tipo = EXCLUDED.tipo,
logo = EXCLUDED.logo, evolution_api_url = EXCLUDED.evolution_api_url,
evolution_instance_name = EXCLUDED.evolution_instance_name, evolution_api_key = EXCLUDED.evolution_api_key,
message_templates = EXCLUDED.message_templates, updated_at = NOW()`,
[
p.id, p.name, p.address || '', p.city || '', p.state || '', p.zip || '', p.cnpj || '', p.phone || '', p.email || '', p.type || 'filial',
data.logo || '',
data.evolutionConfig?.apiUrl || '',
data.evolutionConfig?.instanceName || '',
data.evolutionConfig?.apiKey || '',
data.messageTemplates ? JSON.stringify(data.messageTemplates) : null
]
);
console.log(`Synced profile: ${p.name} (${p.type})`);
}
} else if (data.profile) {
console.log('Found single profile in legacy JSON. Syncing...');
const p = data.profile;
await pool.query(
`INSERT INTO configuracoes (
id, nome, endereco, cidade, estado, cep, cnpj, telefone, email, tipo,
logo, evolution_api_url, evolution_instance_name, evolution_api_key,
message_templates, updated_at
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, NOW())
ON CONFLICT (id) DO UPDATE SET
nome = EXCLUDED.nome, endereco = EXCLUDED.endereco, cidade = EXCLUDED.cidade,
estado = EXCLUDED.estado, cep = EXCLUDED.cep, cnpj = EXCLUDED.cnpj,
telefone = EXCLUDED.telefone, email = EXCLUDED.email, tipo = EXCLUDED.tipo,
logo = EXCLUDED.logo, evolution_api_url = EXCLUDED.evolution_api_url,
evolution_instance_name = EXCLUDED.evolution_instance_name, evolution_api_key = EXCLUDED.evolution_api_key,
message_templates = EXCLUDED.message_templates, updated_at = NOW()`,
[
p.id || 'main-school', p.name, p.address || '', p.city || '', p.state || '', p.zip || '', p.cnpj || '', p.phone || '', p.email || '', p.type || 'matriz',
data.logo || '',
data.evolutionConfig?.apiUrl || '',
data.evolutionConfig?.instanceName || '',
data.evolutionConfig?.apiKey || '',
data.messageTemplates ? JSON.stringify(data.messageTemplates) : null
]
);
console.log(`Synced single profile: ${p.name}`);
} else {
console.log('No profiles found in legacy JSON to migrate.');
}
// Double check contents of SQL table
const { rows: checkRows } = await pool.query('SELECT id, nome, tipo, logo FROM configuracoes');
console.log('SQL TABLE CONTENTS AFTER MIGRATION:', checkRows);
console.log('--- MIGRATION COMPLETED SUCCESSFULLY ---');
} catch (err) {
console.error('Migration failed:', err.message);
} finally {
await pool.end();
}
}
migrate();