video-flow-toon/src/routes/video/addVideoConfig.ts

95 lines
2.6 KiB
TypeScript

import express from "express";
import u from "@/utils";
import { error, success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
import { z } from "zod";
const router = express.Router();
// 图片项schema
const imageItemSchema = z
.object({
id: z.number(),
filePath: z.string(),
prompt: z.string().optional(),
})
.nullable();
// 新增视频配置
export default router.post(
"/",
validateFields({
scriptId: z.number(),
projectId: z.number(),
configId: z.number(),
mode: z.enum(["startEnd", "multi", "single", "text", ""]),
startFrame: imageItemSchema.optional(),
endFrame: imageItemSchema.optional(),
images: z
.array(
z.object({
id: z.number(),
filePath: z.string(),
prompt: z.string().optional(),
}),
)
.optional(),
resolution: z.string(),
duration: z.number(),
prompt: z.string().optional(),
audioEnabled: z.boolean(),
}),
async (req, res) => {
const { scriptId, projectId, configId, mode, startFrame, endFrame, images, resolution, duration, prompt, audioEnabled } = req.body;
// 生成新ID
const maxIdResult: any = await u.db("t_videoConfig").max("id as maxId").first();
const newId = (maxIdResult?.maxId || 0) + 1;
const now = Date.now();
const configData = await u.db("t_config").where("id", configId).first();
if (!configData) return res.status(500).send(error("不存在的模型"));
// 插入数据
await u.db("t_videoConfig").insert({
id: newId,
scriptId,
projectId,
manufacturer: configData.manufacturer,
aiConfigId: configId,
mode,
startFrame: startFrame ? JSON.stringify(startFrame) : null,
endFrame: endFrame ? JSON.stringify(endFrame) : null,
images: images ? JSON.stringify(images) : null,
resolution,
duration,
prompt: prompt || "",
selectedResultId: null,
createTime: now,
updateTime: now,
audioEnabled: audioEnabled ? 1 : 0,
});
res.status(200).send(
success({
message: "新增视频配置成功",
data: {
id: newId,
scriptId,
projectId,
manufacturer: configData.manufacturer,
aiConfigId: configId,
model: configData.model,
mode,
startFrame,
endFrame,
images: images || [],
resolution,
duration,
prompt: prompt || "",
selectedResultId: null,
createdAt: new Date(now).toISOString(),
audioEnabled: audioEnabled,
},
}),
);
},
);