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:
CREDO23 2026-03-23 17:54:43 +02:00
parent af2bd744fb
commit da8f90bfe2
9 changed files with 75 additions and 4 deletions

View file

@ -0,0 +1,26 @@
import { defineQuery } from "@rocicorp/zero";
import { z } from "zod";
import { zql } from "../schema/index";
export const messageQueries = {
byThread: defineQuery(
z.object({ threadId: z.number() }),
({ args: { threadId } }) =>
zql.new_chat_messages.where("threadId", threadId).orderBy("createdAt", "asc"),
),
};
export const commentQueries = {
byThread: defineQuery(
z.object({ threadId: z.number() }),
({ args: { threadId } }) =>
zql.chat_comments.where("threadId", threadId).orderBy("createdAt", "asc"),
),
};
export const chatSessionQueries = {
byThread: defineQuery(
z.object({ threadId: z.number() }),
({ args: { threadId } }) => zql.chat_session_state.where("threadId", threadId).one(),
),
};

View file

@ -0,0 +1,21 @@
import { defineQuery } from "@rocicorp/zero";
import { z } from "zod";
import { zql } from "../schema/index";
export const documentQueries = {
bySpace: defineQuery(
z.object({ searchSpaceId: z.number() }),
({ args: { searchSpaceId } }) =>
zql.documents.where("searchSpaceId", searchSpaceId).orderBy("createdAt", "desc"),
),
};
export const connectorQueries = {
bySpace: defineQuery(
z.object({ searchSpaceId: z.number() }),
({ args: { searchSpaceId } }) =>
zql.search_source_connectors
.where("searchSpaceId", searchSpaceId)
.orderBy("createdAt", "desc"),
),
};

View file

@ -0,0 +1,11 @@
import { defineQuery } from "@rocicorp/zero";
import { z } from "zod";
import { zql } from "../schema/index";
export const notificationQueries = {
byUser: defineQuery(
z.object({ userId: z.string() }),
({ args: { userId } }) =>
zql.notifications.where("userId", userId).orderBy("createdAt", "desc"),
),
};

View file

@ -0,0 +1,13 @@
import { defineQueries } from "@rocicorp/zero";
import { chatSessionQueries, commentQueries, messageQueries } from "./chat";
import { connectorQueries, documentQueries } from "./documents";
import { notificationQueries } from "./inbox";
export const queries = defineQueries({
notifications: notificationQueries,
documents: documentQueries,
connectors: connectorQueries,
messages: messageQueries,
comments: commentQueries,
chatSession: chatSessionQueries,
});

View file

@ -1,7 +1,7 @@
import { createSchema, createBuilder, relationships } from "@rocicorp/zero";
import { chatCommentTable, chatSessionStateTable, newChatMessageTable } from "./tables/chat";
import { documentTable, searchSourceConnectorTable } from "./tables/documents";
import { notificationTable } from "./tables/inbox";
import { chatCommentTable, chatSessionStateTable, newChatMessageTable } from "./chat";
import { documentTable, searchSourceConnectorTable } from "./documents";
import { notificationTable } from "./inbox";
const chatCommentRelationships = relationships(chatCommentTable, ({ one }) => ({
message: one({