From 8e013f7a7ce52db5f58e5427b811ee0a2fd17717 Mon Sep 17 00:00:00 2001 From: marsalva Date: Sun, 8 Feb 2026 14:32:09 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 912 +++++++++++++++++++++--------------------------------- 1 file changed, 348 insertions(+), 564 deletions(-) diff --git a/server.js b/server.js index c0cb1a4..69e14de 100644 --- a/server.js +++ b/server.js @@ -1,592 +1,376 @@ - - - - - - Servicios - IntegraRepara - - - - - - +import express from "express"; +import cors from "cors"; +import bcrypt from "bcryptjs"; +import jwt from "jsonwebtoken"; +import pg from "pg"; -
- -
-
- -
- -
-
-
-

- Servicios Activos -

-

Gestiona las reparaciones y sus estados.

-
- -
+const { Pool } = pg; +const app = express(); -
- - - - - - - - - - - - - -
FechaCliente / DirecciónDetalleEstado
Cargando servicios...
-
-
+app.use(cors()); +app.use(express.json()); - + console.log("✅ DB Lista."); + } catch (e) { console.error("❌ Error DB:", e); } finally { client.release(); } +} - +// ESTADOS, CLIENTES, COMPAÑIAS +app.get("/statuses", authMiddleware, async (req, res) => { + try { + let q = await pool.query("SELECT * FROM service_statuses WHERE owner_id=$1 ORDER BY id ASC", [req.user.accountId]); + if (q.rowCount === 0) { + const defaults = [{name:'Pendiente',c:'gray',d:true,f:false},{name:'En Proceso',c:'blue',d:false,f:false},{name:'Terminado',c:'green',d:false,f:true},{name:'Cancelado',c:'red',d:false,f:true}]; + for (const s of defaults) await pool.query("INSERT INTO service_statuses (owner_id,name,color,is_default,is_final) VALUES ($1,$2,$3,$4,$5)", [req.user.accountId,s.name,s.c,s.d,s.f]); + q = await pool.query("SELECT * FROM service_statuses WHERE owner_id=$1 ORDER BY id ASC", [req.user.accountId]); + } + res.json({ ok: true, statuses: q.rows }); + } catch (e) { res.status(500).json({ ok: false }); } +}); +app.get("/clients/search", authMiddleware, async (req, res) => { + try { const { phone } = req.query; const p = normalizePhone(phone); if(!p) return res.json({ok:true,client:null}); const q = await pool.query("SELECT * FROM clients WHERE phone=$1 AND owner_id=$2 LIMIT 1", [p, req.user.accountId]); res.json({ ok: true, client: q.rows[0] || null }); } catch (e) { res.status(500).json({ ok: false }); } +}); +app.get("/companies", authMiddleware, async (req, res) => { try { const q = await pool.query("SELECT * FROM companies WHERE owner_id=$1 ORDER BY name ASC", [req.user.accountId]); res.json({ ok: true, companies: q.rows }); } catch (e) { res.status(500).json({ ok: false }); } }); +app.post("/companies", authMiddleware, async (req, res) => { try { const { name } = req.body; await pool.query("INSERT INTO companies (name, owner_id) VALUES ($1, $2)", [name, req.user.accountId]); res.json({ ok: true }); } catch (e) { res.status(500).json({ ok: false }); } }); -
-
-
+// --- SERVICIOS CRUD COMPLETO --- -
Msg
+app.get("/services", authMiddleware, async (req, res) => { + try { const q = await pool.query(`SELECT s.*, st.name as status_name, st.color as status_color, c.name as company_name FROM services s LEFT JOIN service_statuses st ON s.status_id=st.id LEFT JOIN companies c ON s.company_id=c.id WHERE s.owner_id=$1 ORDER BY s.created_at DESC`, [req.user.accountId]); res.json({ ok: true, services: q.rows }); } catch (e) { res.status(500).json({ ok: false }); } +}); - - - - \ No newline at end of file +const port = process.env.PORT || 3000; +autoUpdateDB().then(() => { app.listen(port, "0.0.0.0", () => console.log(`🚀 Server OK en puerto ${port}`)); }); \ No newline at end of file