58 lines
1.4 KiB
TypeScript

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