ACT丶流星雨 0798ae03ee no message
2026-01-29 18:28:32 +08:00

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));
},
);