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) => {
|
app.get("/api/health", async (_req, res) => {
|
||||||
try {
|
try {
|
||||||
const { error } = await adminSupabase
|
const { error } = await adminSupabase
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue