File size: 1,421 Bytes
5f64024
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { authCondition } from "$lib/server/auth";
import type { Conversation } from "$lib/types/Conversation";
import { collections } from "$lib/server/database";
import { ObjectId } from "mongodb";

export async function GET({ locals }) {
	if (locals.user?._id || locals.sessionId) {
		const settings = await collections.settings.findOne(authCondition(locals));

		const conversations = await collections.conversations
			.find(authCondition(locals))
			.sort({ updatedAt: -1 })
			.project<Pick<Conversation, "assistantId">>({
				assistantId: 1,
			})
			.limit(300)
			.toArray();

		const userAssistants = settings?.assistants?.map((assistantId) => assistantId.toString()) ?? [];
		const userAssistantsSet = new Set(userAssistants);

		const assistantIds = [
			...userAssistants.map((el) => new ObjectId(el)),
			...(conversations.map((conv) => conv.assistantId).filter((el) => !!el) as ObjectId[]),
		];

		const assistants = await collections.assistants.find({ _id: { $in: assistantIds } }).toArray();

		const res = assistants
			.filter((el) => userAssistantsSet.has(el._id.toString()))
			.map((el) => ({
				...el,
				_id: el._id.toString(),
				createdById: undefined,
				createdByMe:
					el.createdById.toString() === (locals.user?._id ?? locals.sessionId).toString(),
			}));

		return Response.json(res);
	} else {
		return Response.json({ message: "Must have session cookie" }, { status: 401 });
	}
}