Actualizar server.js
This commit is contained in:
29
server.js
29
server.js
@@ -996,16 +996,17 @@ app.get("/statuses", authMiddleware, async (req, res) => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
for (const s of defaults) {
|
for (const s of defaults) {
|
||||||
// Buscamos si existe por nombre
|
|
||||||
const check = await pool.query("SELECT id FROM service_statuses WHERE owner_id=$1 AND name=$2", [req.user.accountId, s.name]);
|
const check = await pool.query("SELECT id FROM service_statuses WHERE owner_id=$1 AND name=$2", [req.user.accountId, s.name]);
|
||||||
if(check.rowCount === 0){
|
if(check.rowCount === 0){
|
||||||
// Si no existe, lo creamos blindado
|
|
||||||
await pool.query("INSERT INTO service_statuses (owner_id,name,color,is_default,is_final,is_system) VALUES ($1,$2,$3,$4,$5,$6)", [req.user.accountId,s.name,s.c,s.d,s.f,s.sys]);
|
await pool.query("INSERT INTO service_statuses (owner_id,name,color,is_default,is_final,is_system) VALUES ($1,$2,$3,$4,$5,$6)", [req.user.accountId,s.name,s.c,s.d,s.f,s.sys]);
|
||||||
} else {
|
} else {
|
||||||
// Si existe, lo actualizamos para asegurarnos de que el color y el candado son correctos
|
|
||||||
await pool.query("UPDATE service_statuses SET is_system=true, color=$2, is_final=$3 WHERE id=$1", [check.rows[0].id, s.c, s.f]);
|
await pool.query("UPDATE service_statuses SET is_system=true, color=$2, is_final=$3 WHERE id=$1", [check.rows[0].id, s.c, s.f]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 🧹 MAGIA LIMPIADORA: Le quitamos el candado a los estados viejos (como "Pendiente de Cita")
|
||||||
|
const nombresOficiales = defaults.map(d => d.name);
|
||||||
|
await pool.query("UPDATE service_statuses SET is_system=false WHERE owner_id=$1 AND name != ALL($2::text[])", [req.user.accountId, nombresOficiales]);
|
||||||
|
|
||||||
// 2. RECUPERAMOS LA LISTA YA ACTUALIZADA PARA EL FRONTEND
|
// 2. RECUPERAMOS LA LISTA YA ACTUALIZADA PARA EL FRONTEND
|
||||||
let q = await pool.query("SELECT * FROM service_statuses WHERE owner_id=$1 ORDER BY is_system DESC, id ASC", [req.user.accountId]);
|
let q = await pool.query("SELECT * FROM service_statuses WHERE owner_id=$1 ORDER BY is_system DESC, id ASC", [req.user.accountId]);
|
||||||
@@ -1013,28 +1014,6 @@ app.get("/statuses", authMiddleware, async (req, res) => {
|
|||||||
} catch (e) { res.status(500).json({ ok: false }); }
|
} catch (e) { res.status(500).json({ ok: false }); }
|
||||||
});
|
});
|
||||||
|
|
||||||
app.delete("/statuses/:id", authMiddleware, async (req, res) => {
|
|
||||||
const client = await pool.connect();
|
|
||||||
try {
|
|
||||||
const statusId = req.params.id;
|
|
||||||
const sysCheck = await client.query("SELECT is_system FROM service_statuses WHERE id = $1 AND owner_id = $2", [statusId, req.user.accountId]);
|
|
||||||
if (sysCheck.rowCount > 0 && sysCheck.rows[0].is_system) {
|
|
||||||
return res.status(400).json({ ok: false, error: "Este es un estado esencial del sistema y no se puede borrar." });
|
|
||||||
}
|
|
||||||
const checkSvc = await client.query("SELECT COUNT(*) FROM services WHERE status_id = $1 AND owner_id = $2", [statusId, req.user.accountId]);
|
|
||||||
const checkScrap = await client.query("SELECT COUNT(*) FROM scraped_services WHERE raw_data->>'status_operativo' = $1 AND owner_id = $2", [statusId, req.user.accountId]);
|
|
||||||
if (parseInt(checkSvc.rows[0].count) > 0 || parseInt(checkScrap.rows[0].count) > 0) {
|
|
||||||
return res.status(400).json({ ok: false, error: "No puedes borrar un estado que tiene servicios asignados." });
|
|
||||||
}
|
|
||||||
await client.query("DELETE FROM service_statuses WHERE id=$1 AND owner_id=$2", [statusId, req.user.accountId]);
|
|
||||||
res.json({ ok: true });
|
|
||||||
} catch(e) {
|
|
||||||
res.status(500).json({ ok: false, error: e.message });
|
|
||||||
} finally {
|
|
||||||
client.release();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
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 }); } });
|
||||||
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 }); } });
|
||||||
|
|||||||
Reference in New Issue
Block a user