Solucao Final Injetora

This commit is contained in:
Sidney 2026-04-19 18:28:11 -03:00
parent e8bc996081
commit 985d657b28
6 changed files with 6133 additions and 4 deletions

File diff suppressed because one or more lines are too long

48
manager/injetar_magia.ts Normal file
View File

@ -0,0 +1,48 @@
import fs from 'fs';
async function migrarPelaWeb() {
console.log('🚀 Preparando o envio de dados via Injeção Web (Driblando Firewall)...');
// 1. Lendo os arquivos
const sql = fs.readFileSync('../schema.sql', 'utf8');
// Pegue o seu arquivo que já foi salvo!
const arquivos = fs.readdirSync('.');
const arquivoBackup = arquivos.find(a => a.startsWith('backup_supabase_') && a.endsWith('.json'));
if (!arquivoBackup) {
console.log('❌ O JSON de backup não foi encontrado na pasta manager!');
return;
}
const jsonData = JSON.parse(fs.readFileSync(arquivoBackup, 'utf8'));
// 2. Fazendo o Disparo para a WEB!!!
console.log('🔥 Disparando os dados para a sua nuvem através da porta 443 liberada!');
try {
const payloadLength = JSON.stringify({ senha: 'magia2026', sql, jsonData }).length;
console.log(`📦 Tamanho da carga: ${(payloadLength / 1024 / 1024).toFixed(2)} MB`);
const response = await fetch('https://edumanager.microtecinformaticacurso.com.br/api/migracao-remota', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
senha: 'magia2026',
sql: sql,
jsonData: jsonData
})
});
const resultado = await response.json();
if (response.ok) {
console.log('✅ SUCESSO ABSOLUTO:', resultado.message);
console.log('O seu banco de dados na VPS está criado e populado! Pode abrir o sistema.');
} else {
console.log('⚠️ ALERTA:', resultado.error || resultado);
}
} catch (err) {
console.error('❌ Falha na conexão HTTP:', err.message);
}
}
migrarPelaWeb();

View File

@ -24,7 +24,7 @@ import fs from 'fs';
// ============================================================
const SUPABASE_URL = process.env.VITE_SUPABASE_URL || 'https://ekbuvcjsfcczviqqlfit.supabase.co';
const SUPABASE_KEY = process.env.VITE_SUPABASE_KEY || 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImVrYnV2Y2pzZmNjenZpcXFsZml0Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzA5OTU0MzIsImV4cCI6MjA4NjU3MTQzMn0.oIzBeGF-PjaviZejYb1TeOOEzMm-Jjth1XzvJrjD6us';
const DATABASE_URL = process.env.DATABASE_URL || 'postgresql://edumanager:EduManager2026!Seguro@localhost:5432/edumanager';
const DATABASE_URL = process.env.DATABASE_URL || 'postgresql://edumanager:EduManager2026!Seguro@150.230.87.131:5432/edumanager';
// ============================================================
// INICIALIZAÇÃO

1865
manager/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@
"dependencies": {
"@aws-sdk/client-s3": "^3.700.0",
"@google/genai": "^1.40.0",
"@supabase/supabase-js": "2.39.0",
"@supabase/supabase-js": "^2.39.0",
"@vladmandic/face-api": "^1.7.15",
"browser-image-compression": "^2.0.2",
"cors": "^2.8.6",
@ -24,7 +24,7 @@
"jspdf-autotable": "^3.8.2",
"lucide-react": "^0.563.0",
"multer": "^2.1.1",
"pg": "^8.13.0",
"pg": "^8.20.0",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"recharts": "^3.7.0",

View File

@ -121,6 +121,42 @@ app.put('/api/school-data', async (req, res) => {
}
});
// ============================================================
// ROTA MÁGICA: Driblar Firewall e Migrar via HTTP
// ============================================================
app.post('/api/migracao-remota', async (req, res) => {
try {
const { senha, sql, jsonData } = req.body;
if (senha !== 'magia2026') return res.status(401).send('Não autorizado');
const client = await pool.connect();
try {
await client.query('BEGIN');
// 1. Criar todas as tabelas!
if (sql) await client.query(sql);
// 2. Injetar a mega tabela ponte
if (jsonData) {
await client.query(
`INSERT INTO school_data (id, data, updated_at) VALUES (1, $1, NOW())
ON CONFLICT (id) DO UPDATE SET data = EXCLUDED.data, updated_at = NOW()`,
[JSON.stringify(jsonData)]
);
}
await client.query('COMMIT');
res.json({ success: true, message: 'Banco de dados criado e populado pela internet!' });
} catch (err) {
await client.query('ROLLBACK');
throw err;
} finally {
client.release();
}
} catch (error) {
console.error('Erro na migração HTTP:', error);
res.status(500).json({ error: error.message });
}
});
// ============================================================
// Upload de Logo (MinIO em vez de Supabase Storage)
// ============================================================