edumanagerpro2/manager/scratch/migrate_questoes.cjs

71 lines
2.1 KiB
JavaScript

const { Pool } = require('pg');
const pool = new Pool({
host: '150.230.87.131',
port: 5432,
database: 'edumanager',
user: 'edumanager',
password: 'EduManager2026!Seguro',
ssl: false
});
async function migrateQuestoes() {
const client = await pool.connect();
try {
const { rows } = await client.query('SELECT data FROM school_data LIMIT 1');
if (!rows.length) { console.log('school_data vazio!'); return; }
const exams = rows[0].data.exams || [];
console.log(`\n📄 Verificando ${exams.length} provas no JSON...`);
let totalQuestions = 0;
let questionsMigrated = 0;
for (const exam of exams) {
if (!exam.questions || exam.questions.length === 0) continue;
const pId = exam.id;
// Verificar se a prova já existe no banco
const checkProva = await client.query('SELECT id FROM provas WHERE id = $1', [pId]);
if (checkProva.rows.length === 0) {
console.warn(`Prova ${pId} não encontrada no BD SQL. Ignorando questoes.`);
continue;
}
for (let i = 0; i < exam.questions.length; i++) {
const q = exam.questions[i];
totalQuestions++;
try {
await client.query(
`INSERT INTO questoes_provas (id, prova_id, texto, opcoes, indice_correto, ordem, imagem_url)
VALUES ($1, $2, $3, $4, $5, $6, $7)
ON CONFLICT (id) DO NOTHING`,
[
q.id || `q-${pId}-${i}`,
pId,
q.text || '',
JSON.stringify(q.options || []),
q.correctAnswer !== undefined ? parseInt(q.correctAnswer) : 0,
i,
q.imageUrl || null
]
);
questionsMigrated++;
} catch (e) {
console.warn(`Erro na questão ${q.id}: ${e.message}`);
}
}
}
console.log(`\n✅ Migração concluída: ${questionsMigrated}/${totalQuestions} questões migradas!`);
} catch (err) {
console.error('❌ ERRO:', err);
} finally {
client.release();
await pool.end();
}
}
migrateQuestoes();