import { auth } from '@/app/(auth)/auth'; import type { ArtifactKind } from '@/components/artifact'; import { deleteDocumentsByIdAfterTimestamp, getDocumentsById, saveDocument, } from '@/lib/db/queries'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); const id = searchParams.get('id'); if (!id) { return new Response('Missing id', { status: 400 }); } const session = await auth(); if (!session || !session.user) { return new Response('Unauthorized', { status: 401 }); } const documents = await getDocumentsById({ id }); const [document] = documents; if (!document) { return new Response('Not Found', { status: 404 }); } if (document.userId !== session.user.id) { return new Response('Unauthorized', { status: 401 }); } return Response.json(documents, { status: 200 }); } export async function POST(request: Request) { const { searchParams } = new URL(request.url); const id = searchParams.get('id'); if (!id) { return new Response('Missing id', { status: 400 }); } const session = await auth(); if (!session?.user?.id) { return new Response('Unauthorized', { status: 401 }); } const { content, title, kind, }: { content: string; title: string; kind: ArtifactKind } = await request.json(); const documents = await getDocumentsById({ id: id }); if (documents.length > 0) { const [document] = documents; if (document.userId !== session.user.id) { return new Response('Forbidden', { status: 403 }); } } const document = await saveDocument({ id, content, title, kind, userId: session.user.id, }); return Response.json(document, { status: 200 }); } export async function PATCH(request: Request) { const { searchParams } = new URL(request.url); const id = searchParams.get('id'); const { timestamp }: { timestamp: string } = await request.json(); if (!id) { return new Response('Missing id', { status: 400 }); } const session = await auth(); if (!session || !session.user) { return new Response('Unauthorized', { status: 401 }); } const documents = await getDocumentsById({ id }); const [document] = documents; if (document.userId !== session.user.id) { return new Response('Unauthorized', { status: 401 }); } await deleteDocumentsByIdAfterTimestamp({ id, timestamp: new Date(timestamp), }); return new Response('Deleted', { status: 200 }); }