import { getAppUserFromRequest } from "@/server/app/app-auth"; import { getUserSettings, updateUserSettings, } from "@/server/app/user-preferences"; import { NextResponse } from "next/server"; import { z } from "zod"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; const settingsSchema = z.object({ preferences: z.record(z.string(), z.unknown()).optional(), downloadPreferences: z.record(z.string(), z.unknown()).optional(), }); function mapSettings(settings: Awaited>) { return { preferences: settings.preferences, downloadPreferences: settings.download_preferences, updatedAt: settings.updated_at, }; } export async function GET(request: Request) { try { const user = await getAppUserFromRequest(request); if (!user) { return NextResponse.json( { ok: false, error: "Unauthorized." }, { status: 401 }, ); } const settings = await getUserSettings(user.id); return NextResponse.json({ ok: true, data: mapSettings(settings), }); } catch (error) { const message = error instanceof Error ? error.message : "Unknown error."; return NextResponse.json( { ok: false, error: message }, { status: 500 }, ); } } export async function PATCH(request: Request) { try { const user = await getAppUserFromRequest(request); if (!user) { return NextResponse.json( { ok: false, error: "Unauthorized." }, { status: 401 }, ); } const parsed = settingsSchema.safeParse(await request.json()); if (!parsed.success) { return NextResponse.json( { ok: false, error: "Invalid request body." }, { status: 400 }, ); } const settings = await updateUserSettings({ userId: user.id, preferences: parsed.data.preferences, downloadPreferences: parsed.data.downloadPreferences, }); return NextResponse.json({ ok: true, data: mapSettings(settings), }); } catch (error) { const message = error instanceof Error ? error.message : "Unknown error."; return NextResponse.json( { ok: false, error: message }, { status: 500 }, ); } }