| import type { RequestHandler } from "./$types"; |
| import { collections } from "$lib/server/database"; |
| import { ObjectId } from "mongodb"; |
| import { error, redirect } from "@sveltejs/kit"; |
| import { base } from "$app/paths"; |
| import { z } from "zod"; |
| import type { Message } from "$lib/types/Message"; |
|
|
| export const POST: RequestHandler = async (input) => { |
| const body = await input.request.text(); |
|
|
| let title = ""; |
| let messages: Message[] = []; |
| let fromShareId: string | undefined; |
|
|
| if (body) { |
| fromShareId = z.object({ fromShare: z.string().optional() }).parse(JSON.parse(body)).fromShare; |
|
|
| if (fromShareId) { |
| const conversation = await collections.sharedConversations.findOne({ |
| _id: fromShareId, |
| }); |
|
|
| if (!conversation) { |
| throw error(404, "Conversation not found"); |
| } |
|
|
| title = conversation.title; |
| messages = conversation.messages; |
| } |
| } |
|
|
| const res = await collections.conversations.insertOne({ |
| _id: new ObjectId(), |
| title: |
| title || |
| "Untitled " + |
| ((await collections.conversations.countDocuments({ sessionId: input.locals.sessionId })) + |
| 1), |
| messages, |
| createdAt: new Date(), |
| updatedAt: new Date(), |
| sessionId: input.locals.sessionId, |
| ...(fromShareId ? { meta: { fromShareId } } : {}), |
| }); |
|
|
| return new Response( |
| JSON.stringify({ |
| conversationId: res.insertedId.toString(), |
| }), |
| { headers: { "Content-Type": "application/json" } } |
| ); |
| }; |
|
|
| export const GET: RequestHandler = async () => { |
| throw redirect(302, base || "/"); |
| }; |
|
|