Spaces:
Paused
Paused
Mishig
commited on
[Assistants] Add new indices for efficient querying (#810)
Browse files* [Assistants] Add new indeices for efficient querying
* update indices & use `createdById`
* stronger typing
src/lib/server/database.ts
CHANGED
|
@@ -75,8 +75,9 @@ client.on("open", () => {
|
|
| 75 |
messageEvents.createIndex({ createdAt: 1 }, { expireAfterSeconds: 60 }).catch(console.error);
|
| 76 |
sessions.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 0 }).catch(console.error);
|
| 77 |
sessions.createIndex({ sessionId: 1 }, { unique: true }).catch(console.error);
|
| 78 |
-
assistants.createIndex({
|
| 79 |
assistants.createIndex({ userCount: 1 }).catch(console.error);
|
| 80 |
-
assistants.createIndex({ featured: 1 }).catch(console.error);
|
|
|
|
| 81 |
reports.createIndex({ assistantId: 1 }).catch(console.error);
|
| 82 |
});
|
|
|
|
| 75 |
messageEvents.createIndex({ createdAt: 1 }, { expireAfterSeconds: 60 }).catch(console.error);
|
| 76 |
sessions.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 0 }).catch(console.error);
|
| 77 |
sessions.createIndex({ sessionId: 1 }, { unique: true }).catch(console.error);
|
| 78 |
+
assistants.createIndex({ createdById: 1, userCount: -1 }).catch(console.error);
|
| 79 |
assistants.createIndex({ userCount: 1 }).catch(console.error);
|
| 80 |
+
assistants.createIndex({ featured: 1, userCount: -1 }).catch(console.error);
|
| 81 |
+
assistants.createIndex({ modelId: 1, userCount: -1 }).catch(console.error);
|
| 82 |
reports.createIndex({ assistantId: 1 }).catch(console.error);
|
| 83 |
});
|
src/routes/assistants/+page.server.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { base } from "$app/paths";
|
|
| 2 |
import { ENABLE_ASSISTANTS } from "$env/static/private";
|
| 3 |
import { collections } from "$lib/server/database.js";
|
| 4 |
import type { Assistant } from "$lib/types/Assistant";
|
|
|
|
| 5 |
import { error, redirect } from "@sveltejs/kit";
|
| 6 |
import type { Filter } from "mongodb";
|
| 7 |
|
|
@@ -14,13 +15,17 @@ export const load = async ({ url, locals }) => {
|
|
| 14 |
|
| 15 |
const modelId = url.searchParams.get("modelId");
|
| 16 |
const pageIndex = parseInt(url.searchParams.get("p") ?? "0");
|
| 17 |
-
const
|
| 18 |
-
const createdByCurrentUser = locals.user?.username && locals.user.username ===
|
| 19 |
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
}
|
| 25 |
}
|
| 26 |
|
|
@@ -28,7 +33,7 @@ export const load = async ({ url, locals }) => {
|
|
| 28 |
const filter: Filter<Assistant> = {
|
| 29 |
...(modelId && { modelId }),
|
| 30 |
...(!createdByCurrentUser && { userCount: { $gt: 1 } }),
|
| 31 |
-
...(
|
| 32 |
};
|
| 33 |
const assistants = await collections.assistants
|
| 34 |
.find(filter)
|
|
|
|
| 2 |
import { ENABLE_ASSISTANTS } from "$env/static/private";
|
| 3 |
import { collections } from "$lib/server/database.js";
|
| 4 |
import type { Assistant } from "$lib/types/Assistant";
|
| 5 |
+
import type { User } from "$lib/types/User";
|
| 6 |
import { error, redirect } from "@sveltejs/kit";
|
| 7 |
import type { Filter } from "mongodb";
|
| 8 |
|
|
|
|
| 15 |
|
| 16 |
const modelId = url.searchParams.get("modelId");
|
| 17 |
const pageIndex = parseInt(url.searchParams.get("p") ?? "0");
|
| 18 |
+
const username = url.searchParams.get("user");
|
| 19 |
+
const createdByCurrentUser = locals.user?.username && locals.user.username === username;
|
| 20 |
|
| 21 |
+
let user: Pick<User, "_id"> | null = null;
|
| 22 |
+
if (username) {
|
| 23 |
+
user = await collections.users.findOne<Pick<User, "_id">>(
|
| 24 |
+
{ username },
|
| 25 |
+
{ projection: { _id: 1 } }
|
| 26 |
+
);
|
| 27 |
+
if (!user) {
|
| 28 |
+
throw error(404, `User "${username}" doesn't exist`);
|
| 29 |
}
|
| 30 |
}
|
| 31 |
|
|
|
|
| 33 |
const filter: Filter<Assistant> = {
|
| 34 |
...(modelId && { modelId }),
|
| 35 |
...(!createdByCurrentUser && { userCount: { $gt: 1 } }),
|
| 36 |
+
...(user ? { createdById: user._id } : { featured: true }),
|
| 37 |
};
|
| 38 |
const assistants = await collections.assistants
|
| 39 |
.find(filter)
|