SurfSense/surfsense_web/zero/schema/index.ts
CREDO23 da8f90bfe2 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.
2026-03-23 17:54:43 +02:00

41 lines
1.1 KiB
TypeScript

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);