From 03d84513f284c6d55e56082555b1582786c4c107 Mon Sep 17 00:00:00 2001 From: marsalva Date: Sun, 8 Feb 2026 14:25:54 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 58 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/server.js b/server.js index 24212ad..1a172a0 100644 --- a/server.js +++ b/server.js @@ -29,7 +29,7 @@ const pool = new Pool({ }); // ========================================== -// 🧠 AUTO-ACTUALIZACIƓN DB (REPARADOR POTENTE) +// 🧠 AUTO-ACTUALIZACIƓN DB (REPARADOR FINAL) // ========================================== async function autoUpdateDB() { const client = await pool.connect(); @@ -143,30 +143,41 @@ async function autoUpdateDB() { ); `); - // 2. PARCHE DE REPARACIƓN (AQUƍ ES DONDE SE ARREGLA TU ERROR) - // Este bloque verifica columna por columna. Si falta alguna en tu tabla vieja, la aƱade. + // 2. PARCHE DE REPARACIƓN (SOLUCIƓN ERRORES COLUMNAS) await client.query(` DO $$ BEGIN - -- 1. Client ID + -- REPARACIƓN DE COLUMNAS FALTANTES EN SERVICES + + -- Email (El error actual) + IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='email') THEN + ALTER TABLE services ADD COLUMN email TEXT; + END IF; + + -- Address y Description (Por seguridad) + IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='address') THEN + ALTER TABLE services ADD COLUMN address TEXT; + END IF; + IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='description') THEN + ALTER TABLE services ADD COLUMN description TEXT; + END IF; + IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='title') THEN + ALTER TABLE services ADD COLUMN title TEXT; + END IF; + + -- Resto de columnas (IDs, Fechas, Contacto) IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='client_id') THEN ALTER TABLE services ADD COLUMN client_id INT REFERENCES clients(id) ON DELETE SET NULL; END IF; - - -- 2. Status ID IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='status_id') THEN ALTER TABLE services ADD COLUMN status_id INT REFERENCES service_statuses(id) ON DELETE SET NULL; END IF; - - -- 3. Contact Info IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='contact_phone') THEN ALTER TABLE services ADD COLUMN contact_phone TEXT; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='contact_name') THEN ALTER TABLE services ADD COLUMN contact_name TEXT; END IF; - - -- 4. Fechas y Tiempos IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='scheduled_date') THEN ALTER TABLE services ADD COLUMN scheduled_date DATE DEFAULT CURRENT_DATE; END IF; @@ -176,8 +187,6 @@ async function autoUpdateDB() { IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='duration_minutes') THEN ALTER TABLE services ADD COLUMN duration_minutes INT DEFAULT 30; END IF; - - -- 5. CompaƱƭa IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='company_id') THEN ALTER TABLE services ADD COLUMN company_id INT REFERENCES companies(id) ON DELETE SET NULL; END IF; @@ -187,8 +196,6 @@ async function autoUpdateDB() { IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='company_ref') THEN ALTER TABLE services ADD COLUMN company_ref TEXT; END IF; - - -- 6. Notas y otros IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='services' AND column_name='internal_notes') THEN ALTER TABLE services ADD COLUMN internal_notes TEXT; END IF; @@ -205,7 +212,7 @@ async function autoUpdateDB() { END $$; `); - console.log("āœ… DB Sincronizada y Reparada."); + console.log("āœ… DB Sincronizada y Reparada (Email incluido)."); } catch (e) { console.error("āŒ Error DB:", e); } finally { @@ -377,7 +384,26 @@ app.post("/admin/users", authMiddleware, async (req, res) => { await client.query('COMMIT'); res.json({ ok: true }); } catch (e) { await client.query('ROLLBACK'); res.status(500).json({ ok: false }); } finally { client.release(); } }); -app.put("/admin/users/:id", authMiddleware, async (req, res) => { /* Update user logic... */ res.json({ok:true}); }); // Simplificado para brevedad, mantener el original si lo necesitas completo +app.put("/admin/users/:id", authMiddleware, async (req, res) => { + const client = await pool.connect(); + try { + const userId = req.params.id; + const { fullName, email, phone, role, guilds, password } = req.body; + const p = normalizePhone(phone); + await client.query('BEGIN'); + if(password) { + const hash = await bcrypt.hash(password, 10); + await client.query("UPDATE users SET full_name=$1, email=$2, phone=$3, role=$4, password_hash=$5 WHERE id=$6", [fullName, email, p, role, hash, userId]); + } else { + await client.query("UPDATE users SET full_name=$1, email=$2, phone=$3, role=$4 WHERE id=$5", [fullName, email, p, role, userId]); + } + if (guilds && Array.isArray(guilds)) { + await client.query("DELETE FROM user_guilds WHERE user_id=$1", [userId]); + for (const gid of guilds) await client.query("INSERT INTO user_guilds (user_id, guild_id) VALUES ($1, $2)", [userId, gid]); + } + await client.query('COMMIT'); res.json({ ok: true }); + } catch (e) { await client.query('ROLLBACK'); res.status(500).json({ ok: false }); } finally { client.release(); } +}); app.delete("/admin/users/:id", authMiddleware, async (req, res) => { try { await pool.query("DELETE FROM users WHERE id=$1 AND owner_id=$2", [req.params.id, req.user.accountId]); res.json({ ok: true }); } catch (e) { res.status(500).json({ ok: false }); } }); const port = process.env.PORT || 3000;