diff --git a/src/app/api/auth/login/route.ts b/src/app/api/auth/login/route.ts index 5e1fbcc..3a2e0d8 100644 --- a/src/app/api/auth/login/route.ts +++ b/src/app/api/auth/login/route.ts @@ -12,7 +12,7 @@ import { setSessionContext, SESSION_COOKIE, } from "@/lib/auth" -import { query } from "@/lib/db" + function jsonResponse(data: unknown, status: number) { return new Response(JSON.stringify(data), { @@ -115,11 +115,6 @@ export async function POST(request: NextRequest) { true ) - await query( - `UPDATE users SET preferences = preferences || $2::jsonb WHERE id = $1`, - [dbUser.id, JSON.stringify({ website_theme: "default" })], - ) - const token = await createSession(dbUser.id, dbUser.role_name) await setSessionContext(dbUser.id, ipAddress) diff --git a/src/app/api/settings/website-theme/route.ts b/src/app/api/settings/website-theme/route.ts index b67875f..a89c2c1 100644 --- a/src/app/api/settings/website-theme/route.ts +++ b/src/app/api/settings/website-theme/route.ts @@ -8,12 +8,13 @@ export async function GET() { if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 }) const result = await query( - `SELECT preferences->>'website_theme' AS website_theme FROM users WHERE id = $1`, + `SELECT preferences->>'website_theme' AS website_theme, preferences->>'color_theme' AS color_theme FROM users WHERE id = $1`, [user.id], ) const websiteTheme = result.rows[0]?.website_theme || "default" - return NextResponse.json({ websiteTheme }) + const colorTheme = result.rows[0]?.color_theme || null + return NextResponse.json({ websiteTheme, colorTheme }) } catch (error) { console.error("Website theme GET error:", error) return NextResponse.json({ error: "Failed to load website theme" }, { status: 500 }) @@ -26,14 +27,31 @@ export async function PUT(request: NextRequest) { if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 }) const body = await request.json() - const theme = body.websiteTheme || "default" + const update: Record = {} + if (body.websiteTheme !== undefined) { + update.website_theme = body.websiteTheme || "default" + } + if (body.colorTheme !== undefined) { + update.color_theme = body.colorTheme || "default" + } - await query( - `UPDATE users SET preferences = preferences || $2::jsonb WHERE id = $1`, - [user.id, JSON.stringify({ website_theme: theme })], + if (Object.keys(update).length > 0) { + await query( + `UPDATE users SET preferences = preferences || $2::jsonb WHERE id = $1`, + [user.id, JSON.stringify(update)], + ) + } + + const result = await query( + `SELECT preferences->>'website_theme' AS website_theme, preferences->>'color_theme' AS color_theme FROM users WHERE id = $1`, + [user.id], ) - return NextResponse.json({ success: true, websiteTheme: theme }) + return NextResponse.json({ + success: true, + websiteTheme: result.rows[0]?.website_theme || "default", + colorTheme: result.rows[0]?.color_theme || null, + }) } catch (error) { console.error("Website theme PUT error:", error) return NextResponse.json({ error: "Failed to save website theme" }, { status: 500 }) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index ceac5ab..5e9516d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -33,6 +33,11 @@ export default function RootLayout({ return ( +