95 lines
2.6 KiB
TypeScript
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,
|
|
},
|
|
}),
|
|
);
|
|
},
|
|
);
|