From 17fdecced2988cb0680250efe9a3abc900c3972b Mon Sep 17 00:00:00 2001 From: marsalva Date: Sun, 15 Mar 2026 11:04:13 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 46 ++++++++-------------------------------------- 1 file changed, 8 insertions(+), 38 deletions(-) diff --git a/server.js b/server.js index d6752f9..45698d9 100644 --- a/server.js +++ b/server.js @@ -1812,7 +1812,7 @@ app.post("/providers/credentials", authMiddleware, async (req, res) => { }); // ========================================== -// šŸ“„ RECEPCIƓN DE SERVICIOS (EMBUDO INTELIGENTE CON MEMORIA DE URGENCIA) +// šŸ“„ RECEPCIƓN DE SERVICIOS (EMBUDO INTELIGENTE DEFINITIVO) // ========================================== app.post("/providers/scraped", authMiddleware, async (req, res) => { try { @@ -1832,6 +1832,7 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => { for (const svc of services) { + // 1. EXTRAER REFERENCIA (Ā”AQUƍ FALTABA 'SERVICIO'!) const ref = svc['service_ref'] || svc['SERVICIO'] || svc['Referencia'] @@ -1841,20 +1842,20 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => { if (!ref) continue; - // šŸ”„ 3. DETECTOR DE URGENCIAS (SOLO VALORES, CERO FALSOS POSITIVOS) šŸ”„ + // 2. DETECTOR DE URGENCIAS (SOLO VALORES, CERO FALSOS POSITIVOS) let esUrgente = false; for (const key in svc) { - const nombreColumna = key.toLowerCase(); + const nombreColumna = String(key).toLowerCase(); const valor = String(svc[key]).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); - // 1. Caso HomeServe (Frases exactas en cualquier valor) + // HomeServe: Frases exactas dentro de los valores if (valor.includes('atencion presencial urgencias') || valor.includes('atencion de la urgencia')) { esUrgente = true; break; } - // 2. Caso Multiasistencia u otros (Columna "Urgente" = SĆ­) + // Multiasistencia: Si la columna contiene "urgent" y el valor es "si" if ((nombreColumna.includes('urgent') || nombreColumna === 'urgencia') && (valor === 'si' || valor === 'true')) { esUrgente = true; break; @@ -1863,6 +1864,7 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => { const guildId = svc.guild_id || svc['guild_id'] || (svc.raw_data && svc.raw_data.guild_id); + // 3. GUARDAMOS EN LA BD (CON MEMORIA: OR EXCLUDED.is_urgent) const insertRes = await pool.query(` INSERT INTO scraped_services (owner_id, provider, service_ref, raw_data, is_urgent) VALUES ($1, $2, $3, $4, $5) @@ -1876,6 +1878,7 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => { const newSvcId = insertRes.rows[0].id; const autoStatus = insertRes.rows[0].automation_status; + // 4. AUTO-DESPACHO if (esUrgente && guildId && autoDispatchEnabled && (autoStatus === 'manual' || autoStatus === 'pending')) { console.log(`⚔ [AUTO-DISPATCH] Lanzando urgencia ${ref} de ${provider} a la bolsa...`); @@ -1902,39 +1905,6 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => { } }); - -app.get("/providers/scraped", authMiddleware, async (req, res) => { - try { - const q = await pool.query(` - SELECT - s.*, - ap.token as active_token, - EXTRACT(EPOCH FROM (ap.expires_at - CURRENT_TIMESTAMP)) as seconds_left, - u.full_name as current_worker_name, - (SELECT json_agg(json_build_object('name', u2.full_name, 'phone', u2.phone)) - FROM assignment_pings ap2 - JOIN users u2 ON ap2.user_id = u2.id - WHERE ap2.scraped_id = s.id AND ap2.status IN ('expired', 'rejected')) as attempted_workers_data - FROM scraped_services s - LEFT JOIN assignment_pings ap ON s.id = ap.scraped_id AND ap.status = 'pending' - LEFT JOIN users u ON ap.user_id = u.id - WHERE s.owner_id = $1 - ORDER BY s.created_at DESC - `, [req.user.accountId]); - - const services = q.rows.map(row => { - if (row.seconds_left && row.seconds_left > 0) { - row.token_expires_at = new Date(Date.now() + (row.seconds_left * 1000)); - } else if (row.seconds_left <= 0) { - row.token_expires_at = new Date(Date.now() - 1000); - } - delete row.seconds_left; - return row; - }); - res.json({ ok: true, services }); - } catch (e) { res.status(500).json({ ok: false }); } -}); - // ========================================== // šŸ¤– RUTA DE AUTOMATIZACIƓN (MEJORADA) // ==========================================