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