65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import express from "express";
|
|
import u from "@/utils";
|
|
import { z } from "zod";
|
|
import { success } from "@/lib/responseFormat";
|
|
import { validateFields } from "@/middleware/middleware";
|
|
const router = express.Router();
|
|
|
|
// 获取生成图片
|
|
export default router.post(
|
|
"/",
|
|
validateFields({
|
|
projectId: z.number(),
|
|
scriptId: z.number().optional(),
|
|
}),
|
|
async (req, res) => {
|
|
const { projectId, scriptId } = req.body;
|
|
const list = await u
|
|
.db("o_assets")
|
|
.leftJoin("o_image", "o_assets.id", "=", "o_image.assetsId")
|
|
.where("o_assets.type", "clip")
|
|
.andWhere("o_assets.projectId", projectId)
|
|
.select("*");
|
|
const data = await Promise.all(
|
|
list.map(async (item) => ({
|
|
...item,
|
|
filePath: item.filePath ? await u.oss.getFileUrl(item.filePath) : "",
|
|
})),
|
|
);
|
|
//拿到本地片尾视频并插入到data中
|
|
const ending = await u.oss.getFileUrl("/ending.mp4", "assets");
|
|
data.push({
|
|
id: 0,
|
|
name: "Toonflow片尾",
|
|
filePath: ending,
|
|
type: "clip",
|
|
});
|
|
// 查询视频轨道
|
|
const trackRows = await u
|
|
.db("o_videoTrack")
|
|
.where("o_videoTrack.scriptId", scriptId)
|
|
.andWhere("o_videoTrack.projectId", projectId)
|
|
.select("o_videoTrack.id as trackId","o_videoTrack.videoId");
|
|
// 按轨道分组处理视频
|
|
const video = await Promise.all(
|
|
trackRows.map(async (track) => {
|
|
const videoItems = await u.db("o_video").where("o_video.videoTrackId", track.trackId).andWhere("o_video.state", "生成成功").select("*");
|
|
const videoList = await Promise.all(
|
|
videoItems.map(async (v) => ({
|
|
id: v.id,
|
|
filePath: v.filePath ? await u.oss.getFileUrl(v.filePath) : "",
|
|
videoTrackId: v.videoTrackId,
|
|
})),
|
|
);
|
|
return {
|
|
id: track.trackId,
|
|
videoId: track.videoId,
|
|
video: videoList,
|
|
};
|
|
}),
|
|
).then((tracks) => tracks.filter((track) => track.video.length > 0));
|
|
|
|
res.status(200).send(success({ data, video }));
|
|
},
|
|
);
|