Actualizar server.js

This commit is contained in:
2026-02-13 09:45:20 +00:00
parent a829cbad3b
commit c81989cc9d

View File

@@ -407,25 +407,36 @@ app.post("/providers/import/:id", authMiddleware, async (req, res) => {
}); });
// ========================================== // ==========================================
// 🗺️ MAPEADOR DE VARIABLES (DISCOVERY) - ¡ESTO ES LO QUE TE FALTA! // 🗺️ MAPEADOR (VERSIÓN LIMPIA: SOLO EL ÚLTIMO SERVICIO)
// ========================================== // ==========================================
app.get("/discovery/keys/:provider", authMiddleware, async (req, res) => { app.get("/discovery/keys/:provider", authMiddleware, async (req, res) => {
try { try {
const { provider } = req.params; const { provider } = req.params;
const rawServices = await pool.query("SELECT raw_data FROM scraped_services WHERE owner_id=$1 AND provider=$2", [req.user.accountId, provider]);
const mappings = await pool.query("SELECT original_key, target_key, is_ignored FROM variable_mappings WHERE owner_id=$1 AND provider=$2", [req.user.accountId, provider]); // CAMBIO: Añadimos 'ORDER BY id DESC LIMIT 1' para coger solo el último
const rawServices = await pool.query(
"SELECT raw_data FROM scraped_services WHERE owner_id=$1 AND provider=$2 ORDER BY id DESC LIMIT 1",
[req.user.accountId, provider]
);
const mappings = await pool.query(
"SELECT original_key, target_key, is_ignored FROM variable_mappings WHERE owner_id=$1 AND provider=$2",
[req.user.accountId, provider]
);
const mapDict = {}; const mapDict = {};
mappings.rows.forEach(m => mapDict[m.original_key] = m); mappings.rows.forEach(m => mapDict[m.original_key] = m);
const discoverySet = new Set(); const discoverySet = new Set();
const samples = {}; const samples = {};
// Como solo hay 1 fila (la última), el bucle es corto y limpio
rawServices.rows.forEach(row => { rawServices.rows.forEach(row => {
const data = row.raw_data; const data = row.raw_data;
if (data && typeof data === 'object') { if (data && typeof data === 'object') {
Object.keys(data).forEach(k => { Object.keys(data).forEach(k => {
discoverySet.add(k); discoverySet.add(k);
if (!samples[k] && data[k]) samples[k] = data[k]; // Guardamos el valor para mostrarlo de ejemplo
if (!samples[k]) samples[k] = data[k];
}); });
} }
}); });
@@ -437,6 +448,18 @@ app.get("/discovery/keys/:provider", authMiddleware, async (req, res) => {
ignored: mapDict[key]?.is_ignored || false ignored: mapDict[key]?.is_ignored || false
})).sort((a, b) => a.original.localeCompare(b.original)); })).sort((a, b) => a.original.localeCompare(b.original));
res.json({ ok: true, keys: result });
} catch (e) { res.status(500).json({ ok: false, error: e.message }); }
});
const result = Array.from(discoverySet).map(key => ({
original: key,
sample: samples[key] || "(Vacío)",
mappedTo: mapDict[key]?.target_key || "",
ignored: mapDict[key]?.is_ignored || false
})).sort((a, b) => a.original.localeCompare(b.original));
res.json({ ok: true, keys: result }); res.json({ ok: true, keys: result });
} catch (e) { res.status(500).json({ ok: false, error: e.message }); } } catch (e) { res.status(500).json({ ok: false, error: e.message }); }
}); });