| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { sqliteTable, text, integer, index, primaryKey } from "drizzle-orm/sqlite-core"
- import { ProjectTable } from "../project/project.sql"
- import type { MessageV2 } from "./message-v2"
- import type { Snapshot } from "@/snapshot"
- import type { PermissionNext } from "@/permission/next"
- import { Timestamps } from "@/storage/schema.sql"
- type PartData = Omit<MessageV2.Part, "id" | "sessionID" | "messageID">
- type InfoData = Omit<MessageV2.Info, "id" | "sessionID">
- export const SessionTable = sqliteTable(
- "session",
- {
- id: text().primaryKey(),
- project_id: text()
- .notNull()
- .references(() => ProjectTable.id, { onDelete: "cascade" }),
- parent_id: text(),
- slug: text().notNull(),
- directory: text().notNull(),
- title: text().notNull(),
- version: text().notNull(),
- share_url: text(),
- summary_additions: integer(),
- summary_deletions: integer(),
- summary_files: integer(),
- summary_diffs: text({ mode: "json" }).$type<Snapshot.FileDiff[]>(),
- revert: text({ mode: "json" }).$type<{ messageID: string; partID?: string; snapshot?: string; diff?: string }>(),
- permission: text({ mode: "json" }).$type<PermissionNext.Ruleset>(),
- ...Timestamps,
- time_compacting: integer(),
- time_archived: integer(),
- },
- (table) => [index("session_project_idx").on(table.project_id), index("session_parent_idx").on(table.parent_id)],
- )
- export const MessageTable = sqliteTable(
- "message",
- {
- id: text().primaryKey(),
- session_id: text()
- .notNull()
- .references(() => SessionTable.id, { onDelete: "cascade" }),
- ...Timestamps,
- data: text({ mode: "json" }).notNull().$type<InfoData>(),
- },
- (table) => [index("message_session_idx").on(table.session_id)],
- )
- export const PartTable = sqliteTable(
- "part",
- {
- id: text().primaryKey(),
- message_id: text()
- .notNull()
- .references(() => MessageTable.id, { onDelete: "cascade" }),
- session_id: text().notNull(),
- ...Timestamps,
- data: text({ mode: "json" }).notNull().$type<PartData>(),
- },
- (table) => [index("part_message_idx").on(table.message_id), index("part_session_idx").on(table.session_id)],
- )
- export const TodoTable = sqliteTable(
- "todo",
- {
- session_id: text()
- .notNull()
- .references(() => SessionTable.id, { onDelete: "cascade" }),
- content: text().notNull(),
- status: text().notNull(),
- priority: text().notNull(),
- position: integer().notNull(),
- ...Timestamps,
- },
- (table) => [
- primaryKey({ columns: [table.session_id, table.position] }),
- index("todo_session_idx").on(table.session_id),
- ],
- )
- export const PermissionTable = sqliteTable("permission", {
- project_id: text()
- .primaryKey()
- .references(() => ProjectTable.id, { onDelete: "cascade" }),
- ...Timestamps,
- data: text({ mode: "json" }).notNull().$type<PermissionNext.Ruleset>(),
- })
|