84 lines
2.8 KiB
TypeScript
84 lines
2.8 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();
|
|
interface TempAsset {
|
|
videoId: number;
|
|
filePath: string;
|
|
type: string;
|
|
}
|
|
|
|
// 获取视频
|
|
export default router.post(
|
|
"/",
|
|
validateFields({
|
|
scriptId: z.number(),
|
|
specifyIds: z.array(z.number()).optional(),
|
|
}),
|
|
async (req, res) => {
|
|
const { scriptId, specifyIds } = req.body;
|
|
|
|
const videos = await u
|
|
.db("t_video")
|
|
.where("scriptId", scriptId)
|
|
.modify((qb) => {
|
|
if (specifyIds && specifyIds.length) {
|
|
qb.whereIn("id", specifyIds);
|
|
}
|
|
})
|
|
.select("id", "configId", "time", "resolution", "prompt", "firstFrame", "filePath", "storyboardImgs", "model", "scriptId", "state");
|
|
// const videoIds: number[] = videos.map((video: any) => (typeof video.id === "string" ? parseInt(video.id) : video.id));
|
|
|
|
// let tempAssets: TempAsset[] = await u
|
|
// .db("t_tempAssets")
|
|
// .whereIn("videoId", videoIds)
|
|
// .whereNot("filePath", "")
|
|
// .select("videoId", "filePath", "type");
|
|
|
|
// tempAssets = await Promise.all(
|
|
// tempAssets.map(async (asset) => {
|
|
// const signedFilePath = asset.filePath ? await u.oss.getFileUrl(asset.filePath) : "";
|
|
// return {
|
|
// ...asset,
|
|
// filePath: signedFilePath,
|
|
// };
|
|
// })
|
|
// );
|
|
|
|
// const tempAssetsMap: Record<number, TempAsset[]> = {};
|
|
// tempAssets.forEach((asset) => {
|
|
// if (!tempAssetsMap[asset.videoId]) {
|
|
// tempAssetsMap[asset.videoId] = [];
|
|
// }
|
|
// tempAssetsMap[asset.videoId]!.push(asset);
|
|
// });
|
|
|
|
const data = await Promise.all(
|
|
videos.map(async (video: any) => {
|
|
let storyboardImgs: string[] = [];
|
|
if (video.storyboardImgs) {
|
|
try {
|
|
storyboardImgs = Array.isArray(video.storyboardImgs) ? video.storyboardImgs : JSON.parse(video.storyboardImgs);
|
|
} catch (err) {
|
|
storyboardImgs = [];
|
|
}
|
|
}
|
|
const signedStoryboardImgs = await Promise.all(storyboardImgs.map((img) => (img ? u.oss.getFileUrl(img) : "")));
|
|
const signedFilePath = video.filePath ? await u.oss.getFileUrl(video.filePath) : "";
|
|
const signedFirstFrame = video.firstFrame ? await u.oss.getFileUrl(video.firstFrame) : "";
|
|
const videoId = typeof video.id === "string" ? parseInt(video.id) : video.id;
|
|
return {
|
|
...video,
|
|
filePath: signedFilePath,
|
|
firstFrame: signedFirstFrame,
|
|
storyboardImgs: signedStoryboardImgs,
|
|
// tempAssets: tempAssetsMap[videoId] || [],
|
|
};
|
|
}),
|
|
);
|
|
res.status(200).send(success(data));
|
|
},
|
|
);
|