mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-02 04:12:47 +02:00
feat: add Zero schema with 6 table definitions and relationships
- Create zero/tables/inbox.ts (notifications) - Create zero/tables/documents.ts (documents, search_source_connectors) - Create zero/tables/chat.ts (new_chat_messages, chat_comments, chat_session_state) - Create zero/schema.ts (combines tables, defines relationships, exports zql) - Consolidate Zero type augmentations into types/zero.d.ts
This commit is contained in:
parent
8298aad2d7
commit
af2bd744fb
5 changed files with 125 additions and 0 deletions
|
|
@ -1,3 +1,5 @@
|
||||||
|
import type { Schema } from "@/zero/schema";
|
||||||
|
|
||||||
export type Context =
|
export type Context =
|
||||||
| {
|
| {
|
||||||
userId: string;
|
userId: string;
|
||||||
|
|
@ -7,5 +9,6 @@ export type Context =
|
||||||
declare module "@rocicorp/zero" {
|
declare module "@rocicorp/zero" {
|
||||||
interface DefaultTypes {
|
interface DefaultTypes {
|
||||||
context: Context;
|
context: Context;
|
||||||
|
schema: Schema;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
41
surfsense_web/zero/schema.ts
Normal file
41
surfsense_web/zero/schema.ts
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
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";
|
||||||
|
|
||||||
|
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);
|
||||||
34
surfsense_web/zero/tables/chat.ts
Normal file
34
surfsense_web/zero/tables/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/tables/documents.ts
Normal file
31
surfsense_web/zero/tables/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/tables/inbox.ts
Normal file
16
surfsense_web/zero/tables/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");
|
||||||
Loading…
Add table
Add a link
Reference in a new issue