Actualizar server.js
This commit is contained in:
37
server.js
37
server.js
@@ -2825,53 +2825,44 @@ 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 {
|
||||||
// 1. Recogemos el nuevo objeto billing_settings
|
|
||||||
const { slug, company_name, company_logo, portal_settings, app_settings, billing_settings } = req.body;
|
const { slug, company_name, company_logo, portal_settings, app_settings, billing_settings } = req.body;
|
||||||
|
|
||||||
|
// 1. Manejo del Slug (Enlace)
|
||||||
let cleanSlug = null;
|
let cleanSlug = null;
|
||||||
if (slug) {
|
if (slug) {
|
||||||
cleanSlug = slug.toLowerCase().replace(/[^a-z0-9-]/g, "");
|
cleanSlug = slug.toLowerCase().replace(/[^a-z0-9-]/g, "");
|
||||||
if (cleanSlug !== slug) return res.status(400).json({ ok: false, error: "El enlace solo puede contener letras minúsculas, números y guiones" });
|
|
||||||
const check = await client.query("SELECT id FROM users WHERE company_slug=$1 AND id != $2", [cleanSlug, req.user.accountId]);
|
const check = await client.query("SELECT id FROM users WHERE company_slug=$1 AND id != $2", [cleanSlug, req.user.accountId]);
|
||||||
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: "Enlace en uso" });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Magia Blanca: Creamos la columna billing_settings "al vuelo" si no existía
|
// 2. Asegurar que existe la columna de facturación
|
||||||
await client.query(`
|
await client.query(`ALTER TABLE users ADD COLUMN IF NOT EXISTS billing_settings JSONB DEFAULT '{}'`);
|
||||||
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 (Añadiendo ?? null para evitar que explote la base de datos)
|
// 3. UPDATE Inteligente: Solo cambia lo que le enviamos, el resto lo deja como está
|
||||||
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(portal_settings, '{}'::jsonb) || COALESCE($4, '{}'::jsonb),
|
||||||
app_settings = COALESCE($5, app_settings),
|
app_settings = COALESCE(app_settings, '{}'::jsonb) || COALESCE($5, '{}'::jsonb),
|
||||||
billing_settings = COALESCE($6, billing_settings)
|
billing_settings = COALESCE(billing_settings, '{}'::jsonb) || COALESCE($6, '{}'::jsonb)
|
||||||
WHERE id = $7
|
WHERE id = $7
|
||||||
`, [
|
`, [
|
||||||
cleanSlug,
|
cleanSlug,
|
||||||
company_name ?? null,
|
company_name ?? null,
|
||||||
company_logo ?? null,
|
company_logo ?? null,
|
||||||
portal_settings ?? null,
|
portal_settings ? JSON.stringify(portal_settings) : null,
|
||||||
app_settings ?? null,
|
app_settings ? JSON.stringify(app_settings) : null,
|
||||||
billing_settings ?? null,
|
billing_settings ? JSON.stringify(billing_settings) : null,
|
||||||
req.user.accountId
|
req.user.accountId
|
||||||
]);
|
]);
|
||||||
|
|
||||||
res.json({ ok: true });
|
res.json({ ok: true });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Error en config/company:", e);
|
console.error("❌ Error guardando config:", e);
|
||||||
res.status(500).json({ ok: false, error: "Error interno" });
|
res.status(500).json({ ok: false });
|
||||||
} finally {
|
} finally { client.release(); }
|
||||||
client.release();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/config/company", authMiddleware, async (req, res) => {
|
app.get("/config/company", authMiddleware, async (req, res) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user