import { Elysia, t } from "elysia"; import prisma from "../lib/prisma"; import { adminOnly } from "../middleware/auth"; export const settingsRoute = new Elysia({ prefix: "/settings" }) .get("/", async ({ set }) => { try { let settings = await prisma.storeSettings.findFirst(); if (!settings) { settings = await prisma.storeSettings.create({ data: {} }); } return settings; } catch (err) { console.error("[Settings] Error:", err); set.status = 500; return { error: "Failed to fetch settings" }; } }) .use(adminOnly) .put("/", async ({ body, set }) => { try { const data = body; let settings = await prisma.storeSettings.findFirst(); if (!settings) { settings = await prisma.storeSettings.create({ data }); } else { settings = await prisma.storeSettings.update({ where: { id: settings.id }, data }); } return settings; } catch (err) { console.error("[Settings] Error:", err); set.status = 500; return { error: "Failed to update settings" }; } }, { body: t.Object({ brandName: t.String(), shippingFee: t.Number(), bankName: t.String(), bankAccountName: t.String(), bankAccountNumber: t.String(), pointsEarnRate: t.Number(), logoUrl: t.Optional(t.String()), themePreset: t.Optional(t.String()), themeTokens: t.Optional(t.Any()), facebookUrl: t.Optional(t.String()), instagramUrl: t.Optional(t.String()), tiktokUrl: t.Optional(t.String()), footerDescription: t.Optional(t.String()), newsletterTitle: t.Optional(t.String()), newsletterDescription: t.Optional(t.String()), newsletterPlaceholder: t.Optional(t.String()), newsletterButtonText: t.Optional(t.String()), footerSupportHeading: t.Optional(t.Any()), footerCopyrightText: t.Optional(t.Any()) }) }) .patch("/translations", async ({ body, set }) => { try { let settings = await prisma.storeSettings.findFirst(); if (!settings) { settings = await prisma.storeSettings.create({ data: {} }); } const payload = body; const results = []; const LANGS = ['th', 'en', 'ja', 'zh', 'vi', 'ko']; for (const lang of LANGS) { const footerDescription = typeof payload.footerDescription === 'string' ? (lang === 'th' ? payload.footerDescription : null) : payload.footerDescription?.[lang]; const newsletterTitle = typeof payload.newsletterTitle === 'string' ? (lang === 'th' ? payload.newsletterTitle : null) : payload.newsletterTitle?.[lang]; const newsletterDescription = typeof payload.newsletterDescription === 'string' ? (lang === 'th' ? payload.newsletterDescription : null) : payload.newsletterDescription?.[lang]; const newsletterPlaceholder = typeof payload.newsletterPlaceholder === 'string' ? (lang === 'th' ? payload.newsletterPlaceholder : null) : payload.newsletterPlaceholder?.[lang]; const newsletterButtonText = typeof payload.newsletterButtonText === 'string' ? (lang === 'th' ? payload.newsletterButtonText : null) : payload.newsletterButtonText?.[lang]; if (!footerDescription && !newsletterTitle && !newsletterDescription && !newsletterPlaceholder && !newsletterButtonText) continue; const existing = await prisma.storeSettingsTranslation.findUnique({ where: { storeSettingsId_langCode: { storeSettingsId: settings.id, langCode: lang } } }); const updateData = {}; if (footerDescription) updateData.footerDescription = footerDescription; if (newsletterTitle) updateData.newsletterTitle = newsletterTitle; if (newsletterDescription) updateData.newsletterDescription = newsletterDescription; if (newsletterPlaceholder) updateData.newsletterPlaceholder = newsletterPlaceholder; if (newsletterButtonText) updateData.newsletterButtonText = newsletterButtonText; if (existing) { const updated = await prisma.storeSettingsTranslation.update({ where: { id: existing.id }, data: updateData }); results.push(updated); } else { const created = await prisma.storeSettingsTranslation.create({ data: { storeSettingsId: settings.id, langCode: lang, ...updateData } }); results.push(created); } } const updatedSettings = await prisma.storeSettings.findFirst({ include: { translations: true } }); return { success: true, translations: results, settings: updatedSettings }; } catch (err) { console.error("[Settings] Translation Error:", err); set.status = 500; return { error: "Failed to update settings translation" }; } }); //# sourceMappingURL=settings.js.map