Skip to content

Commit cf28c87

Browse files
authored
♻️ refactor: optimize files schema definition (#10403)
1 parent bd2e838 commit cf28c87

File tree

3 files changed

+19
-15
lines changed

3 files changed

+19
-15
lines changed

packages/database/src/models/agent.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,26 @@ export class AgentModel {
2626
const knowledge = await this.getAgentAssignedKnowledge(id);
2727

2828
// Fetch document content for enabled files
29-
const enabledFileIds = knowledge.files.filter((f) => f.enabled).map((f) => f.id);
29+
const enabledFileIds = knowledge.files
30+
.filter((f) => f.enabled)
31+
.map((f) => f.id)
32+
.filter((id) => id !== undefined);
33+
let files: Array<(typeof knowledge.files)[number] & { content?: string | null }> =
34+
knowledge.files;
3035

3136
if (enabledFileIds.length > 0) {
3237
const documentsData = await this.db.query.documents.findMany({
3338
where: and(eq(documents.userId, this.userId), inArray(documents.fileId, enabledFileIds)),
3439
});
3540

3641
const documentMap = new Map(documentsData.map((doc) => [doc.fileId, doc.content]));
37-
38-
knowledge.files = knowledge.files.map((file) => ({
42+
files = knowledge.files.map((file) => ({
3943
...file,
4044
content: file.enabled && file.id ? documentMap.get(file.id) : undefined,
4145
}));
4246
}
4347

44-
return { ...agent, ...knowledge };
48+
return { ...agent, ...knowledge, files };
4549
};
4650

4751
getAgentAssignedKnowledge = async (id: string) => {

packages/database/src/schemas/file.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* eslint-disable sort-keys-fix/sort-keys-fix */
22
import { isNotNull } from 'drizzle-orm';
33
import {
4+
AnyPgColumn,
45
boolean,
56
index,
67
integer,
@@ -41,7 +42,6 @@ export type GlobalFileItem = typeof globalFiles.$inferSelect;
4142
/**
4243
* Documents table - Stores file content or web search results
4344
*/
44-
// @ts-ignore
4545
export const documents = pgTable(
4646
'documents',
4747
{
@@ -72,15 +72,12 @@ export const documents = pgTable(
7272
source: text('source').notNull(), // File path or web URL
7373

7474
// Associated file (optional)
75-
// Forward reference to files table defined below
75+
// forward reference needs AnyPgColumn to avoid circular type inference
7676
// eslint-disable-next-line @typescript-eslint/no-use-before-define
77-
// @ts-expect-error - files is defined later in this file, forward reference is valid at runtime
78-
// eslint-disable-next-line @typescript-eslint/no-use-before-define
79-
fileId: text('file_id').references(() => files.id, { onDelete: 'set null' }),
77+
fileId: text('file_id').references((): AnyPgColumn => files.id, { onDelete: 'set null' }),
8078

8179
// Parent document (for folder hierarchy structure)
82-
// @ts-ignore
83-
parentId: varchar('parent_id', { length: 255 }).references(() => documents.id, {
80+
parentId: varchar('parent_id', { length: 255 }).references((): AnyPgColumn => documents.id, {
8481
onDelete: 'set null',
8582
}),
8683

@@ -113,7 +110,6 @@ export type NewDocument = typeof documents.$inferInsert;
113110
export type DocumentItem = typeof documents.$inferSelect;
114111
export const insertDocumentSchema = createInsertSchema(documents);
115112

116-
// @ts-ignore
117113
export const files = pgTable(
118114
'files',
119115
{
@@ -140,8 +136,7 @@ export const files = pgTable(
140136
source: text('source').$type<FileSource>(),
141137

142138
// Parent Folder or Document
143-
// @ts-ignore
144-
parentId: varchar('parent_id', { length: 255 }).references(() => documents.id, {
139+
parentId: varchar('parent_id', { length: 255 }).references((): AnyPgColumn => documents.id, {
145140
onDelete: 'set null',
146141
}),
147142

src/server/routers/lambda/chunk.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,12 @@ export const chunkRouter = router({
162162
}
163163

164164
// 2. Find existing parsed document
165-
let document = await ctx.documentModel.findByFileId(fileId);
165+
let document:
166+
| {
167+
content: string | null;
168+
metadata: Record<string, any> | null;
169+
}
170+
| undefined = await ctx.documentModel.findByFileId(fileId);
166171

167172
// 3. If not exists, parse the file
168173
if (!document) {

0 commit comments

Comments
 (0)