mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-29 02:46:25 +02:00
feat: add Zero queries for all 6 synced tables
Define named queries matching each Electric hook's data needs: - notifications.byUser (use-inbox) - documents.bySpace (use-documents, use-documents-processing) - connectors.bySpace (use-connectors-electric) - messages.byThread (use-messages-electric) - comments.byThread (use-comments-electric) - chatSession.byThread (use-chat-session-state) Also moves schema files from zero/tables/ to zero/schema/ for consistent modular folder structure.
This commit is contained in:
parent
af2bd744fb
commit
da8f90bfe2
9 changed files with 75 additions and 4 deletions
34
surfsense_web/zero/schema/chat.ts
Normal file
34
surfsense_web/zero/schema/chat.ts
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
import { table, string, number, json } from "@rocicorp/zero";
|
||||
|
||||
export const newChatMessageTable = table("new_chat_messages")
|
||||
.columns({
|
||||
id: number(),
|
||||
role: string(),
|
||||
content: json(),
|
||||
threadId: number().from("thread_id"),
|
||||
authorId: string().optional().from("author_id"),
|
||||
createdAt: number().from("created_at"),
|
||||
})
|
||||
.primaryKey("id");
|
||||
|
||||
export const chatCommentTable = table("chat_comments")
|
||||
.columns({
|
||||
id: number(),
|
||||
messageId: number().from("message_id"),
|
||||
threadId: number().from("thread_id"),
|
||||
parentId: number().optional().from("parent_id"),
|
||||
authorId: string().optional().from("author_id"),
|
||||
content: string(),
|
||||
createdAt: number().from("created_at"),
|
||||
updatedAt: number().from("updated_at"),
|
||||
})
|
||||
.primaryKey("id");
|
||||
|
||||
export const chatSessionStateTable = table("chat_session_state")
|
||||
.columns({
|
||||
id: number(),
|
||||
threadId: number().from("thread_id"),
|
||||
aiRespondingToUserId: string().optional().from("ai_responding_to_user_id"),
|
||||
updatedAt: number().from("updated_at"),
|
||||
})
|
||||
.primaryKey("id");
|
||||
31
surfsense_web/zero/schema/documents.ts
Normal file
31
surfsense_web/zero/schema/documents.ts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import { table, string, number, boolean, json } from "@rocicorp/zero";
|
||||
|
||||
export const documentTable = table("documents")
|
||||
.columns({
|
||||
id: number(),
|
||||
title: string(),
|
||||
documentType: string().from("document_type"),
|
||||
searchSpaceId: number().from("search_space_id"),
|
||||
createdById: string().optional().from("created_by_id"),
|
||||
status: json(),
|
||||
createdAt: number().from("created_at"),
|
||||
})
|
||||
.primaryKey("id");
|
||||
|
||||
export const searchSourceConnectorTable = table("search_source_connectors")
|
||||
.columns({
|
||||
id: number(),
|
||||
name: string(),
|
||||
connectorType: string().from("connector_type"),
|
||||
isIndexable: boolean().from("is_indexable"),
|
||||
lastIndexedAt: number().optional().from("last_indexed_at"),
|
||||
config: json(),
|
||||
enableSummary: boolean().from("enable_summary"),
|
||||
periodicIndexingEnabled: boolean().from("periodic_indexing_enabled"),
|
||||
indexingFrequencyMinutes: number().optional().from("indexing_frequency_minutes"),
|
||||
nextScheduledAt: number().optional().from("next_scheduled_at"),
|
||||
searchSpaceId: number().from("search_space_id"),
|
||||
userId: string().from("user_id"),
|
||||
createdAt: number().from("created_at"),
|
||||
})
|
||||
.primaryKey("id");
|
||||
16
surfsense_web/zero/schema/inbox.ts
Normal file
16
surfsense_web/zero/schema/inbox.ts
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import { table, string, number, boolean, json } from "@rocicorp/zero";
|
||||
|
||||
export const notificationTable = table("notifications")
|
||||
.columns({
|
||||
id: number(),
|
||||
userId: string().from("user_id"),
|
||||
searchSpaceId: number().optional().from("search_space_id"),
|
||||
type: string(),
|
||||
title: string(),
|
||||
message: string(),
|
||||
read: boolean(),
|
||||
metadata: json().optional(),
|
||||
createdAt: number().from("created_at"),
|
||||
updatedAt: number().optional().from("updated_at"),
|
||||
})
|
||||
.primaryKey("id");
|
||||
41
surfsense_web/zero/schema/index.ts
Normal file
41
surfsense_web/zero/schema/index.ts
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
import { createSchema, createBuilder, relationships } from "@rocicorp/zero";
|
||||
import { chatCommentTable, chatSessionStateTable, newChatMessageTable } from "./chat";
|
||||
import { documentTable, searchSourceConnectorTable } from "./documents";
|
||||
import { notificationTable } from "./inbox";
|
||||
|
||||
const chatCommentRelationships = relationships(chatCommentTable, ({ one }) => ({
|
||||
message: one({
|
||||
sourceField: ["messageId"],
|
||||
destSchema: newChatMessageTable,
|
||||
destField: ["id"],
|
||||
}),
|
||||
parent: one({
|
||||
sourceField: ["parentId"],
|
||||
destSchema: chatCommentTable,
|
||||
destField: ["id"],
|
||||
}),
|
||||
}));
|
||||
|
||||
const newChatMessageRelationships = relationships(newChatMessageTable, ({ many }) => ({
|
||||
comments: many({
|
||||
sourceField: ["id"],
|
||||
destSchema: chatCommentTable,
|
||||
destField: ["messageId"],
|
||||
}),
|
||||
}));
|
||||
|
||||
export const schema = createSchema({
|
||||
tables: [
|
||||
notificationTable,
|
||||
documentTable,
|
||||
searchSourceConnectorTable,
|
||||
newChatMessageTable,
|
||||
chatCommentTable,
|
||||
chatSessionStateTable,
|
||||
],
|
||||
relationships: [chatCommentRelationships, newChatMessageRelationships],
|
||||
});
|
||||
|
||||
export type Schema = typeof schema;
|
||||
|
||||
export const zql = createBuilder(schema);
|
||||
Loading…
Add table
Add a link
Reference in a new issue