Actualizar server.js

This commit is contained in:
2026-02-28 20:23:06 +00:00
parent 38a9c7051c
commit 78ed90286e

View File

@@ -1979,6 +1979,52 @@ app.post("/public/assignment/:token/reject", async (req, res) => {
}
});
// ==========================================
// 📖 MOTOR DE TRAZABILIDAD (LOGS)
// ==========================================
// Creamos la tabla automáticamente si no existe
pool.query(`
CREATE TABLE IF NOT EXISTS scraped_service_logs (
id SERIAL PRIMARY KEY,
scraped_id INT REFERENCES scraped_services(id) ON DELETE CASCADE,
user_name TEXT,
action TEXT NOT NULL,
details TEXT,
created_at TIMESTAMP DEFAULT NOW()
);
`).catch(console.error);
// Ruta para GUARDAR un evento en el log
app.post("/services/:id/log", authMiddleware, async (req, res) => {
try {
const { action, details } = req.body;
// Buscamos el nombre de quien hace la acción
const userQ = await pool.query("SELECT full_name FROM users WHERE id=$1", [req.user.sub]);
const userName = userQ.rows[0]?.full_name || "Sistema";
await pool.query(
"INSERT INTO scraped_service_logs (scraped_id, user_name, action, details) VALUES ($1, $2, $3, $4)",
[req.params.id, userName, action, details || ""]
);
res.json({ ok: true });
} catch(e) {
console.error("Error Log:", e);
res.status(500).json({ ok: false });
}
});
// Ruta para LEER el historial de un servicio
app.get("/services/:id/logs", authMiddleware, async (req, res) => {
try {
const q = await pool.query(
"SELECT * FROM scraped_service_logs WHERE scraped_id = $1 ORDER BY created_at DESC",
[req.params.id]
);
res.json({ ok: true, logs: q.rows });
} catch(e) { res.status(500).json({ ok: false }); }
});
// ==========================================
// 🕒 EL RELOJ DEL SISTEMA (Ejecutar cada minuto)
// ==========================================