Actualizar server.js
This commit is contained in:
31
server.js
31
server.js
@@ -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 }); }
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user