41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { auth } from "@/app/(auth)/auth";
|
|
import { db } from "@/lib/db";
|
|
import { canvasProject } from "@/lib/db/schema";
|
|
import { eq, and, sql, desc } from "drizzle-orm";
|
|
import { NextResponse } from "next/server";
|
|
export async function GET() {
|
|
const session = await auth();
|
|
if (!session?.user?.id)
|
|
return NextResponse.json({ error: "未登录" }, { status: 401 });
|
|
const rows = await db
|
|
.select({
|
|
projectId: canvasProject.id,
|
|
title: canvasProject.title,
|
|
templates: sql<any[]>`${canvasProject.canvasData}->'groupTemplates'`,
|
|
})
|
|
.from(canvasProject)
|
|
.where(
|
|
and(
|
|
eq(canvasProject.userId, session.user.id),
|
|
eq(canvasProject.workspaceType, "video"),
|
|
sql`${canvasProject.canvasData} ? 'groupTemplates'`
|
|
)
|
|
)
|
|
.orderBy(desc(canvasProject.updatedAt))
|
|
.limit(100);
|
|
return NextResponse.json(
|
|
{
|
|
templates: rows.flatMap((row) =>
|
|
Array.isArray(row.templates)
|
|
? row.templates.map((template) => ({
|
|
...template,
|
|
projectId: row.projectId,
|
|
projectTitle: row.title,
|
|
}))
|
|
: []
|
|
),
|
|
},
|
|
{ headers: { "Cache-Control": "no-store" } }
|
|
);
|
|
}
|