Inject site settings API endpoints before /api/health
cgen-bbdff03f84a1448ebea83878371cfdaf
This commit is contained in:
parent
4e4b6d06bf
commit
34e3593d04
1 changed files with 55 additions and 0 deletions
|
|
@ -426,6 +426,61 @@ export function createServer() {
|
|||
}
|
||||
});
|
||||
|
||||
// Site settings (admin-managed)
|
||||
app.get("/api/site-settings", async (req, res) => {
|
||||
try {
|
||||
const key = String(req.query.key || "").trim();
|
||||
if (key) {
|
||||
try {
|
||||
const { data, error } = await adminSupabase
|
||||
.from("site_settings")
|
||||
.select("value")
|
||||
.eq("key", key)
|
||||
.maybeSingle();
|
||||
if (error) {
|
||||
if (isTableMissing(error)) return res.json({});
|
||||
return res.status(500).json({ error: error.message });
|
||||
}
|
||||
return res.json((data as any)?.value || {});
|
||||
} catch (e: any) {
|
||||
return res.status(500).json({ error: e?.message || String(e) });
|
||||
}
|
||||
}
|
||||
const { data, error } = await adminSupabase
|
||||
.from("site_settings")
|
||||
.select("key, value");
|
||||
if (error) {
|
||||
if (isTableMissing(error)) return res.json({});
|
||||
return res.status(500).json({ error: error.message });
|
||||
}
|
||||
const map: Record<string, any> = {};
|
||||
for (const row of data || []) map[(row as any).key] = (row as any).value;
|
||||
return res.json(map);
|
||||
} catch (e: any) {
|
||||
return res.status(500).json({ error: e?.message || String(e) });
|
||||
}
|
||||
});
|
||||
|
||||
app.post("/api/site-settings", async (req, res) => {
|
||||
try {
|
||||
const { key, value } = (req.body || {}) as { key?: string; value?: any };
|
||||
if (!key || typeof key !== "string") {
|
||||
return res.status(400).json({ error: "key required" });
|
||||
}
|
||||
const payload = { key, value: value ?? {} } as any;
|
||||
const { error } = await adminSupabase
|
||||
.from("site_settings")
|
||||
.upsert(payload, { onConflict: "key" as any });
|
||||
if (error) {
|
||||
if (isTableMissing(error)) return res.status(400).json({ error: "site_settings table missing" });
|
||||
return res.status(500).json({ error: error.message });
|
||||
}
|
||||
return res.json({ ok: true });
|
||||
} catch (e: any) {
|
||||
return res.status(500).json({ error: e?.message || String(e) });
|
||||
}
|
||||
});
|
||||
|
||||
app.get("/api/health", async (_req, res) => {
|
||||
try {
|
||||
const { error } = await adminSupabase
|
||||
|
|
|
|||
Loading…
Reference in a new issue