Actualizar server.js
This commit is contained in:
32
server.js
32
server.js
@@ -1467,6 +1467,38 @@ app.get("/statuses", authMiddleware, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
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("/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 }); } });
|
||||||
|
|
||||||
|
// --- ENDPOINT PARA GENERAR ENLACE AL PORTAL DEL CLIENTE DESDE LA APP ---
|
||||||
|
app.post('/clients/ensure', authMiddleware, async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { phone, name, address } = req.body;
|
||||||
|
if (!phone) return res.status(400).json({ ok: false, error: "Teléfono obligatorio" });
|
||||||
|
|
||||||
|
// Normalizar teléfono (quitar espacios, +34, etc) para buscar bien
|
||||||
|
const cleanPhone = phone.replace('+34', '').replace(/\s+/g, '').trim();
|
||||||
|
const ownerId = req.user.accountId;
|
||||||
|
|
||||||
|
const q = await pool.query("SELECT * FROM clients WHERE phone LIKE $1 AND owner_id = $2 LIMIT 1", [`%${cleanPhone}%`, ownerId]);
|
||||||
|
|
||||||
|
if (q.rowCount > 0) {
|
||||||
|
// Cliente existe, devolvemos su token
|
||||||
|
res.json({ ok: true, client: q.rows[0] });
|
||||||
|
} else {
|
||||||
|
// Cliente nuevo, generamos token y lo creamos
|
||||||
|
const newToken = crypto.randomBytes(6).toString('hex'); // Token seguro y corto
|
||||||
|
const insert = await pool.query(
|
||||||
|
"INSERT INTO clients (owner_id, full_name, phone, addresses, portal_token) VALUES ($1, $2, $3, $4, $5) RETURNING portal_token",
|
||||||
|
[ownerId, name || "Cliente", phone, JSON.stringify([address || ""]), newToken]
|
||||||
|
);
|
||||||
|
res.json({ ok: true, client: { portal_token: insert.rows[0].portal_token } });
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error ensure client:", e);
|
||||||
|
res.status(500).json({ ok: false, error: "Error interno del servidor" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
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.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 }); } });
|
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 }); } });
|
||||||
app.delete("/companies/:id", authMiddleware, async (req, res) => { try { await pool.query("DELETE FROM companies 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 }); } });
|
app.delete("/companies/:id", authMiddleware, async (req, res) => { try { await pool.query("DELETE FROM companies 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 }); } });
|
||||||
|
|||||||
Reference in New Issue
Block a user