edumanagerpro2/manager/scratch/fix_justifications.js

127 lines
4.6 KiB
JavaScript

import pg from 'pg';
const pool = new pg.Pool({
user: 'edumanager',
host: '150.230.87.131',
database: 'edumanager',
password: 'EduManager2026!Seguro',
port: 5432,
});
async function main() {
console.log('🔄 Iniciando correção de justificativas e limpeza de duplicidades no VPS...');
const evillaId = '311709fb-68ab-4168-8684-887b5ec2d731';
const evillaLessonId = 'ca727723-e854-4503-b032-b811e06cfcdf';
const evillaJustId = 'att-just-1777745007528';
const lohannyId = '05de4757-d36f-4de6-9e57-5792d13ad3e7';
const lohannyLessonId = '080469ea-58fc-4231-a016-fd35b99c0dce';
const lohannyJustId = 'att-just-1777143386721';
// ==========================================
// 1. CORREÇÃO NO BANCO DE DADOS (SQL)
// ==========================================
const client = await pool.connect();
try {
await client.query('BEGIN');
// Evilla: Deletar duplicidades no SQL
const delEvilla = await client.query(
'DELETE FROM frequencias WHERE aluno_id = $1 AND DATE(data) = \'2026-05-02\' AND id <> $2',
[evillaId, evillaJustId]
);
console.log(`[SQL] Deletadas ${delEvilla.rowCount} duplicidades para Evilla em 02/05/2026.`);
// Evilla: Corrigir fuso da justificativa e setar aula_id no SQL
const updEvilla = await client.query(
'UPDATE frequencias SET data = \'2026-05-02 14:00:00\', aula_id = $1 WHERE id = $2',
[evillaLessonId, evillaJustId]
);
console.log(`[SQL] Justificativa da Evilla corrigida para 14:00 (aula: ${evillaLessonId}).`);
// Maria Lohanny: Deletar duplicidades no SQL
const delLohanny = await client.query(
'DELETE FROM frequencias WHERE aluno_id = $1 AND DATE(data) = \'2026-04-25\' AND id <> $2',
[lohannyId, lohannyJustId]
);
console.log(`[SQL] Deletadas ${delLohanny.rowCount} duplicidades para Maria Lohanny em 25/04/2026.`);
// Maria Lohanny: Corrigir fuso da justificativa e setar aula_id no SQL
const updLohanny = await client.query(
'UPDATE frequencias SET data = \'2026-04-25 14:00:00\', aula_id = $1 WHERE id = $2',
[lohannyLessonId, lohannyJustId]
);
console.log(`[SQL] Justificativa da Maria Lohanny corrigida para 14:00 (aula: ${lohannyLessonId}).`);
await client.query('COMMIT');
console.log('[SQL] Transação finalizada com sucesso!');
} catch (err) {
await client.query('ROLLBACK');
console.error('[SQL] ❌ Erro ao atualizar tabelas:', err);
}
// ==========================================
// 2. CORREÇÃO NO CACHE LEGADO (JSON NA TABELA school_data)
// ==========================================
try {
const { rows } = await client.query('SELECT data FROM school_data WHERE id = 1');
const schoolData = rows[0]?.data || {};
if (schoolData && Array.isArray(schoolData.attendance)) {
console.log(`[JSON] Analisando array de presença (${schoolData.attendance.length} registros)...`);
// Remover duplicidades
const initialLength = schoolData.attendance.length;
schoolData.attendance = schoolData.attendance.filter(a => {
if (a.id === evillaJustId || a.id === lohannyJustId) return true;
if (a.studentId === evillaId && a.date && a.date.startsWith('2026-05-02')) {
return false;
}
if (a.studentId === lohannyId && a.date && a.date.startsWith('2026-04-25')) {
return false;
}
return true;
});
console.log(`[JSON] Removidos ${initialLength - schoolData.attendance.length} registros duplicados.`);
// Corrigir fuso horário das justificativas no JSON
let fixedCount = 0;
for (const a of schoolData.attendance) {
if (a.id === evillaJustId) {
a.date = '2026-05-02T14:00:00';
a.lessonId = evillaLessonId;
fixedCount++;
}
if (a.id === lohannyJustId) {
a.date = '2026-04-25T14:00:00';
a.lessonId = lohannyLessonId;
fixedCount++;
}
}
console.log(`[JSON] Corrigidas ${fixedCount} justificativas no JSON.`);
// Salvar de volta na tabela school_data
await client.query('UPDATE school_data SET data = $1, updated_at = NOW() WHERE id = 1', [JSON.stringify(schoolData)]);
console.log('[JSON] Tabela school_data atualizada com sucesso!');
} else {
console.warn('[JSON] Dados de frequência não localizados no school_data.');
}
} catch (err) {
console.error('[JSON] ❌ Erro ao atualizar cache JSON:', err);
} finally {
client.release();
}
console.log('✅ Correção de justificativas concluída com sucesso!');
pool.end();
}
main().catch(err => {
console.error('❌ Erro inesperado:', err);
pool.end();
});