import { auth } from '@/app/(auth)/auth'; import type { ArtifactKind } from '@/components/artifact'; import { deleteDocumentsByIdAfterTimestamp, getDocumentsById, saveDocument, } from '@/lib/db/queries'; import { ChatSDKError } from '@/lib/errors'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); const id = searchParams.get('id'); if (!id) { return new ChatSDKError( 'bad_request:api', 'Parameter id is missing', ).toResponse(); } const session = await auth(); if (!session?.user) { return new ChatSDKError('unauthorized:document').toResponse(); } const documents = await getDocumentsById({ id }); const [document] = documents; if (!document) { return new ChatSDKError('not_found:document').toResponse(); } if (document.userId !== session.user.id) { return new ChatSDKError('forbidden:document').toResponse(); } 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 ChatSDKError( 'bad_request:api', 'Parameter id is required.', ).toResponse(); } const session = await auth(); if (!session?.user) { return new ChatSDKError('not_found:document').toResponse(); } const { content, title, kind, }: { content: string; title: string; kind: ArtifactKind } = await request.json(); const documents = await getDocumentsById({ id }); if (documents.length > 0) { const [document] = documents; if (document.userId !== session.user.id) { return new ChatSDKError('forbidden:document').toResponse(); } } const document = await saveDocument({ id, content, title, kind, userId: session.user.id, }); return Response.json(document, { status: 200 }); } export async function DELETE(request: Request) { const { searchParams } = new URL(request.url); const id = searchParams.get('id'); const timestamp = searchParams.get('timestamp'); if (!id) { return new ChatSDKError( 'bad_request:api', 'Parameter id is required.', ).toResponse(); } if (!timestamp) { return new ChatSDKError( 'bad_request:api', 'Parameter timestamp is required.', ).toResponse(); } const session = await auth(); if (!session?.user) { return new ChatSDKError('unauthorized:document').toResponse(); } const documents = await getDocumentsById({ id }); const [document] = documents; if (document.userId !== session.user.id) { return new ChatSDKError('forbidden:document').toResponse(); } const documentsDeleted = await deleteDocumentsByIdAfterTimestamp({ id, timestamp: new Date(timestamp), }); return Response.json(documentsDeleted, { status: 200 }); }