diff --git a/server.js b/server.js index e887cbf..4497d8d 100644 --- a/server.js +++ b/server.js @@ -491,14 +491,28 @@ app.post("/providers/automate/:id", authMiddleware, async (req, res) => { await pool.query("UPDATE scraped_services SET automation_status = 'in_progress' WHERE id = $1", [id]); - const worker = workersQ.rows[Math.floor(Math.random() * workersQ.rows.length)]; - const token = crypto.randomBytes(16).toString('hex'); - const expiresAt = new Date(Date.now() + 5 * 60 * 1000); // 5 Minutos + const worker = workersQ.rows[Math.floor(Math.random() * workersQ.rows.length)]; +const token = crypto.randomBytes(16).toString('hex'); - // Formatear hora de caducidad (HH:mm) - const horaCaducidad = expiresAt.toLocaleTimeString('es-ES', { hour: '2-digit', minute: '2-digit' }); +// A) Delegamos la inserción y el cálculo del tiempo a PostgreSQL +// Usamos NOW() de la base de datos + 5 minutos y devolvemos la hora exacta calculada +const insertPing = await pool.query(` + INSERT INTO assignment_pings (scraped_id, user_id, token, expires_at) + VALUES ($1, $2, $3, NOW() + INTERVAL '5 minutes') + RETURNING expires_at +`, [id, worker.id, token]); - await pool.query(`INSERT INTO assignment_pings (scraped_id, user_id, token, expires_at) VALUES ($1, $2, $3, $4)`, [id, worker.id, token, expiresAt]); +// B) Extraemos la hora exacta que la DB considerará como límite +const dbExpiresAt = insertPing.rows[0].expires_at; + +// C) Formateamos esa hora para el WhatsApp, forzando la zona horaria de España (Europa/Madrid) +// Así nos aseguramos de que el mensaje de WhatsApp siempre cuadre con el reloj local del operario, +// sin importar en qué zona horaria esté alojado el servidor Node.js +const horaCaducidad = new Date(dbExpiresAt).toLocaleTimeString('es-ES', { + hour: '2-digit', + minute: '2-digit', + timeZone: 'Europe/Madrid' // Forzamos la zona horaria española +}); // 3. Construir mensaje de WhatsApp con toda la información solicitada const link = `https://web.integrarepara.es/aceptar.html?t=${token}`;