51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import { z } from "zod";
|
|
import { requireAdmin } from "@/lib/middleware/admin";
|
|
import { getSystemSetting } from "@/lib/db/queries";
|
|
import { ChatSDKError } from "@/lib/errors";
|
|
import {
|
|
THIRD_PARTY_SQLSERVER_CONFIG_KEY,
|
|
thirdPartySqlServerConfigSchema,
|
|
} from "@/lib/sqlserver/config";
|
|
import { testSqlServerConnection } from "@/lib/sqlserver/client";
|
|
|
|
export const runtime = "nodejs";
|
|
|
|
const requestSchema = z.object({
|
|
config: thirdPartySqlServerConfigSchema.optional(),
|
|
});
|
|
|
|
export async function POST(request: Request) {
|
|
try {
|
|
await requireAdmin();
|
|
|
|
const body = requestSchema.parse(await request.json().catch(() => ({})));
|
|
const savedSetting = !body.config
|
|
? await getSystemSetting({ key: THIRD_PARTY_SQLSERVER_CONFIG_KEY }).catch(() => null)
|
|
: null;
|
|
const config = body.config ?? savedSetting?.value ?? {};
|
|
|
|
const result = await testSqlServerConnection(config);
|
|
|
|
return Response.json({
|
|
success: true,
|
|
...result,
|
|
});
|
|
} catch (error) {
|
|
if (error instanceof ChatSDKError) {
|
|
return error.toResponse();
|
|
}
|
|
|
|
if (error instanceof z.ZodError) {
|
|
return new ChatSDKError("bad_request:api", error.message).toResponse();
|
|
}
|
|
|
|
return Response.json(
|
|
{
|
|
code: "bad_request:api",
|
|
message: error instanceof Error ? error.message : "SQL Server 连接测试失败",
|
|
},
|
|
{ status: 400 },
|
|
);
|
|
}
|
|
}
|