import { and, eq } from "drizzle-orm"; import { providers } from "~~/drizzle/schema"; import { db } from "~~/server/lib/db"; import * as z from 'zod'; export default defineEventHandler(async (event) => { await protectRoute(event); const userId = event.context.user!.id; const result = await readValidatedBody(event, (body) => z .object({ config: z.object({ apiKey: z.string().optional(), apiProxyUrl: z.string().optional(), }).optional(), enabled: z.boolean().optional(), }) .safeParse(body), ); if (!result.success) { throw createError({ statusCode: 400, message: result.error.issues[0]!.message, }); } const providerId = getRouterParam(event, 'providerId')!; const { config, enabled } = result.data; const existing = await db.query.providers.findFirst({ where: { id: providerId, userId, }, }); if (!existing) { throw createError({ statusCode: 400, statusMessage: 'Invalid provider', }); } const res = await db.update(providers) .set({ config, enabled, }) .where( and( eq(providers.id, providerId), eq(providers.userId, userId), ) ); if (res.rowCount === 0) { throw createError({ statusCode: 400, statusMessage: 'Invalid provider', }); } return { ok: true }; });