import { type NextRequest, NextResponse } from "next/server"; import { z } from "zod"; import { requireSession } from "@/lib/api-auth"; import { db, userModelPrefs, eq } from "@epicure/db"; const Schema = z.object({ textProvider: z.string().nullable().optional(), textModel: z.string().nullable().optional(), visionProvider: z.string().nullable().optional(), visionModel: z.string().nullable().optional(), mealPlanProvider: z.string().nullable().optional(), mealPlanModel: z.string().nullable().optional(), }); export async function GET() { const { session, response } = await requireSession(); if (response) return response; const prefs = await db.query.userModelPrefs.findFirst({ where: eq(userModelPrefs.userId, session!.user.id), }); return NextResponse.json(prefs ?? null); } export async function PUT(req: NextRequest) { const { session, response } = await requireSession(); if (response) return response; const body = Schema.safeParse(await req.json()); if (!body.success) return NextResponse.json({ error: "Invalid request" }, { status: 400 }); await db .insert(userModelPrefs) .values({ id: crypto.randomUUID(), userId: session!.user.id, ...body.data, updatedAt: new Date() }) .onConflictDoUpdate({ target: userModelPrefs.userId, set: { ...body.data, updatedAt: new Date() }, }); return NextResponse.json({ ok: true }); }