File size: 1,518 Bytes
5da61b4
 
 
2e28042
6434339
 
1b66f8d
6434339
1b66f8d
 
2e28042
 
1b66f8d
 
6434339
 
1b66f8d
09edaa6
 
2e28042
09edaa6
 
 
 
 
 
 
 
 
 
1b66f8d
 
6434339
 
 
 
 
 
 
 
 
 
 
 
 
1b66f8d
5da61b4
9405a81
2606dde
6434339
1b66f8d
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { collections } from "$lib/server/database";
import { ObjectId } from "mongodb";
import { error } from "@sveltejs/kit";
import { authCondition } from "$lib/server/auth";
import type { WebSearchMessageResult } from "$lib/types/WebSearch";
import { UrlDependency } from "$lib/types/UrlDependency";

export const load = async ({ params, depends, locals }) => {
	// todo: add validation on params.id
	const conversation = await collections.conversations.findOne({
		_id: new ObjectId(params.id),
		...authCondition(locals),
	});

	depends(UrlDependency.Conversation);

	if (!conversation) {
		const conversationExists =
			(await collections.conversations.countDocuments({
				_id: new ObjectId(params.id),
			})) !== 0;

		if (conversationExists) {
			throw error(
				403,
				"You don't have access to this conversation. If someone gave you this link, ask them to use the 'share' feature instead."
			);
		}

		throw error(404, "Conversation not found.");
	}

	const webSearchesId = conversation.messages
		.filter((message) => message.webSearchId)
		.map((message) => new ObjectId(message.webSearchId));

	const results = await collections.webSearches.find({ _id: { $in: webSearchesId } }).toArray();

	const searches = Object.fromEntries(
		results.map((x) => [
			x._id.toString(),
			[...x.messages, { type: "result", id: x._id.toString() } satisfies WebSearchMessageResult],
		])
	);

	return {
		messages: conversation.messages,
		title: conversation.title,
		model: conversation.model,
		searches,
	};
};