import { eq } from 'drizzle-orm' import { z } from 'zod' const schema = z.object({ name: z.string().optional(), type: z.enum(['openai-compatible', 'anthropic', 'google']).optional(), baseUrl: z.string().optional(), // 不传或传空字符串表示保留原有密钥 apiKey: z.string().optional(), // 传入时把该连接下的模型同步为这个列表 models: z.array(z.string()).optional() }) export default defineEventHandler(async (event) => { const id = param(event) const body = await readJson(event, schema) const db = useDb() const current = db.select().from(tables.providers).where(eq(tables.providers.id, id)).get() if (!current) throw createError({ statusCode: 404, message: 'API 连接不存在' }) const type = body.type ?? current.type const baseUrl = body.baseUrl !== undefined ? body.baseUrl.trim() : current.baseUrl const patch: Partial = { type, baseUrl } if (body.name !== undefined) patch.name = body.name.trim() || defaultProviderName(type, baseUrl) if (body.apiKey) patch.apiKeyEnc = encryptSecret(body.apiKey.trim()) let result = { added: 0, removed: 0 } db.transaction(() => { db.update(tables.providers).set(patch).where(eq(tables.providers.id, id)).run() if (body.models) result = syncProviderModels(id, body.models) }) return { ok: true, ...result } })