From c0f87443f0cec64ff4795beee37782d64584b8f6 Mon Sep 17 00:00:00 2001 From: marsalva Date: Thu, 5 Mar 2026 21:45:38 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/server.js b/server.js index c01c2a3..2b7d712 100644 --- a/server.js +++ b/server.js @@ -79,6 +79,23 @@ async function autoUpdateDB() { status TEXT DEFAULT 'active', created_at TIMESTAMP DEFAULT NOW() ); + + -- COLA DEL ROBOT + CREATE TABLE IF NOT EXISTS robot_queue ( + id SERIAL PRIMARY KEY, + owner_id INT REFERENCES users(id) ON DELETE CASCADE, + provider TEXT DEFAULT 'homeserve', + service_number TEXT NOT NULL, + new_status TEXT NOT NULL, + appointment_date TEXT, + observation TEXT, + inform_client BOOLEAN DEFAULT FALSE, + status TEXT DEFAULT 'PENDING', -- PENDING, RUNNING, DONE, FAILED + error_msg TEXT, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() + + ); CREATE TABLE IF NOT EXISTS login_codes ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE CASCADE, @@ -2688,6 +2705,44 @@ app.delete("/budgets/:id", authMiddleware, async (req, res) => { } }); +// ========================================== +// 🤖 API COLA DEL ROBOT (REEMPLAZO FIREBASE) +// ========================================== + +// 1. Enviar una orden al Robot +app.post("/robot/queue", authMiddleware, async (req, res) => { + try { + const { service_number, new_status, appointment_date, observation, inform_client } = req.body; + + const q = await pool.query(` + INSERT INTO robot_queue (owner_id, service_number, new_status, appointment_date, observation, inform_client) + VALUES ($1, $2, $3, $4, $5, $6) RETURNING id + `, [req.user.accountId, service_number, new_status, appointment_date || "", observation || "", inform_client || false]); + + res.json({ ok: true, jobId: q.rows[0].id }); + } catch (e) { + console.error("Error guardando en cola:", e); + res.status(500).json({ ok: false, error: e.message }); + } +}); + +// 2. Leer el estado de la cola (Monitor) +app.get("/robot/queue", authMiddleware, async (req, res) => { + try { + const q = await pool.query(` + SELECT id, service_number, status, error_msg, created_at + FROM robot_queue + WHERE owner_id = $1 + ORDER BY created_at DESC + LIMIT 20 + `, [req.user.accountId]); + + res.json({ ok: true, jobs: q.rows }); + } catch (e) { + res.status(500).json({ ok: false }); + } +}); + // ========================================== // 🕒 EL RELOJ DEL SISTEMA (Ejecutar cada minuto)