57 lines
1.6 KiB
TypeScript

import { NextResponse } from "next/server";
import { z } from "zod";
import { auth } from "@/app/(auth)/auth";
import { getSystemSetting } from "@/lib/db/queries";
import {
VIDEO_CANVAS_FUNCTION_CONFIG_KEY,
defaultVideoCanvasFunctionConfig,
normalizeVideoCanvasFunctionConfig,
} from "@/lib/video-canvas/config";
import { rankVideoCanvasEffectPresets } from "@/lib/video-canvas/video-effects";
export const dynamic = "force-dynamic";
const requestSchema = z.object({
query: z.string().trim().max(100).default(""),
});
export async function POST(request: Request) {
const session = await auth();
if (!session?.user?.id) {
return NextResponse.json({ success: false, error: "未登录" }, { status: 401 });
}
const parsed = requestSchema.safeParse(await request.json().catch(() => ({})));
if (!parsed.success) {
return NextResponse.json(
{ success: false, error: parsed.error.issues[0]?.message || "搜索参数无效" },
{ status: 400 },
);
}
const setting = await getSystemSetting({
key: VIDEO_CANVAS_FUNCTION_CONFIG_KEY,
}).catch(() => null);
const config = setting?.value
? normalizeVideoCanvasFunctionConfig(setting.value)
: defaultVideoCanvasFunctionConfig;
if (!config.enabled) {
return NextResponse.json(
{ success: false, error: "视频画布功能已停用" },
{ status: 403 },
);
}
return NextResponse.json({
success: true,
data: {
presets: rankVideoCanvasEffectPresets(
config.effectPresets,
parsed.data.query,
),
query: parsed.data.query,
},
});
}