Actualizar server.js

This commit is contained in:
2026-03-23 08:43:03 +00:00
parent 8ea2293868
commit 72bfd30bf6

View File

@@ -2795,7 +2795,8 @@ app.get("/config/company", authMiddleware, async (req, res) => {
app.post("/config/company", authMiddleware, async (req, res) => { app.post("/config/company", authMiddleware, async (req, res) => {
const client = await pool.connect(); const client = await pool.connect();
try { try {
const { slug, company_name, company_logo, portal_settings, app_settings } = req.body; // 1. Recogemos el nuevo objeto billing_settings
const { slug, company_name, company_logo, portal_settings, app_settings, billing_settings } = req.body;
let cleanSlug = null; let cleanSlug = null;
if (slug) { if (slug) {
@@ -2805,15 +2806,26 @@ app.post("/config/company", authMiddleware, async (req, res) => {
if (check.rowCount > 0) return res.status(400).json({ ok: false, error: "Ese enlace ya está en uso por otra empresa" }); if (check.rowCount > 0) return res.status(400).json({ ok: false, error: "Ese enlace ya está en uso por otra empresa" });
} }
// 2. Magia Blanca: Creamos la columna billing_settings "al vuelo" si no existía, sin que tengas que ir a Adminer
await client.query(`
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='users' AND column_name='billing_settings') THEN
ALTER TABLE users ADD COLUMN billing_settings JSONB DEFAULT '{}';
END IF;
END $$;
`);
// 3. Guardamos todo, incluyendo la facturación
await client.query(` await client.query(`
UPDATE users UPDATE users
SET company_slug = COALESCE($1, company_slug), SET company_slug = COALESCE($1, company_slug),
full_name = COALESCE($2, full_name), full_name = COALESCE($2, full_name),
company_logo = COALESCE($3, company_logo), company_logo = COALESCE($3, company_logo),
portal_settings = COALESCE($4, portal_settings), portal_settings = COALESCE($4, portal_settings),
app_settings = COALESCE($5, app_settings) app_settings = COALESCE($5, app_settings),
WHERE id = $6 billing_settings = COALESCE($6, billing_settings)
`, [cleanSlug, company_name, company_logo, portal_settings, app_settings, req.user.accountId]); WHERE id = $7
`, [cleanSlug, company_name, company_logo, portal_settings, app_settings, billing_settings, req.user.accountId]);
res.json({ ok: true }); res.json({ ok: true });
} catch (e) { } catch (e) {
@@ -2824,6 +2836,22 @@ app.post("/config/company", authMiddleware, async (req, res) => {
} }
}); });
app.get("/config/company", authMiddleware, async (req, res) => {
try {
// 4. Modificamos también el GET para que devuelva los datos de facturación al Frontend
const q = await pool.query("SELECT company_slug, full_name, plan_tier, company_logo, portal_settings, app_settings, billing_settings FROM users WHERE id=$1", [req.user.accountId]);
res.json({ ok: true, config: q.rows[0] || {} });
} catch (e) {
// Si falla porque la columna aún no se ha creado (el usuario nunca ha guardado), devolvemos el resto normal
try {
const fallback = await pool.query("SELECT company_slug, full_name, plan_tier, company_logo, portal_settings, app_settings FROM users WHERE id=$1", [req.user.accountId]);
res.json({ ok: true, config: fallback.rows[0] || {} });
} catch(fallbackError) {
res.status(500).json({ ok: false });
}
}
});
// RUTA: Alta de expediente manual con validación de cliente // RUTA: Alta de expediente manual con validación de cliente
app.post("/services/manual-high", authMiddleware, async (req, res) => { app.post("/services/manual-high", authMiddleware, async (req, res) => {
try { try {