57 lines
1.6 KiB
TypeScript
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,
|
|
},
|
|
});
|
|
}
|