diff --git a/server.js b/server.js index c705047..c1ccde8 100644 --- a/server.js +++ b/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) => { try { 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 = {}; mappings.rows.forEach(m => mapDict[m.original_key] = m); const discoverySet = new Set(); const samples = {}; + // Como solo hay 1 fila (la última), el bucle es corto y limpio rawServices.rows.forEach(row => { const data = row.raw_data; if (data && typeof data === 'object') { Object.keys(data).forEach(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 })).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 }); } catch (e) { res.status(500).json({ ok: false, error: e.message }); } });