import { and, eq } from "drizzle-orm"; import { z } from "zod"; import { db } from "@/lib/db"; import { canvasProject } from "@/lib/db/schema"; import { openApiErrorResponse, requireOpenApiPrincipal, } from "@/lib/access-keys/openapi-auth"; const canvasIdSchema = z.string().uuid(); export async function GET( request: Request, { params }: { params: Promise<{ id: string }> } ) { try { const principal = await requireOpenApiPrincipal(request, "canvas:read"); const { id: rawId } = await params; const parsedId = canvasIdSchema.safeParse(rawId); if (!parsedId.success) { return Response.json( { success: false, error: "Invalid canvas ID", code: "INVALID_CANVAS_ID", }, { status: 400 } ); } const id = parsedId.data; const [project] = await db .select() .from(canvasProject) .where( and( eq(canvasProject.id, id), eq(canvasProject.userId, principal.userId) ) ) .limit(1); if (!project) { return Response.json( { success: false, error: "Canvas not found", code: "CANVAS_NOT_FOUND" }, { status: 404 } ); } return Response.json( { success: true, data: project }, { headers: { "Cache-Control": "no-store" } } ); } catch (error) { return openApiErrorResponse(error); } }