diff --git a/robot.js b/robot.js index 7b4e914..aa92dcc 100644 --- a/robot.js +++ b/robot.js @@ -214,12 +214,25 @@ async function syncAndArchive(ownerId, provider, currentWebRefs) { } async function saveServiceToDB(ownerId, provider, ref, data) { - console.log(`💾 Guardando ${provider.toUpperCase()} ${ref}...`); + console.log(`💾 Guardando/Actualizando ${provider.toUpperCase()} ${ref}...`); + + // Utilizamos el operador || de JSONB en Postgres para fusionar los datos. + // EXCLUDED.raw_data contiene lo nuevo del scraper. + // scraped_services.raw_data contiene lo que ya estaba (incluyendo assigned_to, etc). + // Al poner EXCLUDED primero y concatenar lo existente después, preservamos los campos internos + // que el scraper no conoce, y solo actualizamos lo que viene de fuera. + await pool.query(` INSERT INTO scraped_services (owner_id, provider, service_ref, raw_data, status) VALUES ($1, $2, $3, $4, 'pending') ON CONFLICT (owner_id, provider, service_ref) - DO UPDATE SET raw_data = EXCLUDED.raw_data, created_at = NOW(), status = 'pending' + DO UPDATE SET + raw_data = EXCLUDED.raw_data || scraped_services.raw_data, + status = CASE + WHEN scraped_services.status = 'archived' THEN 'archived' + WHEN scraped_services.status = 'imported' THEN 'imported' + ELSE 'pending' + END `, [ownerId, provider, ref, JSON.stringify(data)]); }