Your Name 23521d8362
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
feat: add doubao video provider and persist video task recovery
2026-02-18 21:00:07 +08:00

73 lines
2.3 KiB
TypeScript

import { auth } from "@/app/(auth)/auth";
import { getChatById, getPendingVideoMessagesByChatId } from "@/lib/db/queries";
export const dynamic = "force-dynamic";
export const revalidate = 0;
export async function GET(request: Request) {
try {
const session = await auth();
if (!session?.user?.id) {
return new Response(JSON.stringify({ error: "Unauthorized" }), {
status: 401,
headers: { "Content-Type": "application/json" },
});
}
const { searchParams } = new URL(request.url);
const chatId = searchParams.get("chatId");
if (!chatId) {
return new Response(JSON.stringify({ error: "Missing chatId" }), {
status: 400,
headers: { "Content-Type": "application/json" },
});
}
const selectedChat = await getChatById({ id: chatId });
if (!selectedChat || selectedChat.userId !== session.user.id) {
return new Response(JSON.stringify({ error: "Forbidden" }), {
status: 403,
headers: { "Content-Type": "application/json" },
});
}
const pendingMessages = await getPendingVideoMessagesByChatId({ chatId });
const tasks = pendingMessages.map((msg) => {
const metadata = (msg.videoMetadata as Record<string, any>) || {};
return {
messageId: msg.id,
taskId: typeof metadata.taskId === "string" ? metadata.taskId : null,
provider:
typeof metadata.provider === "string" ? metadata.provider : null,
model: typeof metadata.model === "string" ? metadata.model : null,
mode: typeof metadata.mode === "string" ? metadata.mode : null,
status:
typeof metadata.status === "string" ? metadata.status : "queued",
startedAt: metadata.startedAt ?? null,
updatedAt: metadata.updatedAt ?? null,
};
});
return new Response(
JSON.stringify({
chatId,
count: tasks.length,
tasks,
}),
{
status: 200,
headers: {
"Content-Type": "application/json",
"Cache-Control": "no-store, max-age=0",
},
}
);
} catch (error) {
console.error("[Video Tasks API] GET error:", error);
return new Response(JSON.stringify({ error: "Internal server error" }), {
status: 500,
headers: { "Content-Type": "application/json" },
});
}
}