import { table, text, integer, now, ownableColumns, createSharesTable, } from "@agent-native/core/db/schema"; export const decks = table("decks", { id: text("id").primaryKey(), title: text("title").notNull(), data: text("data").notNull(), // Full deck JSON designSystemId: text("design_system_id"), createdAt: text("created_at").default(now()), updatedAt: text("updated_at").default(now()), ...ownableColumns(), }); export const deckShares = createSharesTable("deck_shares"); export const deckVersions = table("deck_versions", { id: text("id").primaryKey(), ownerEmail: text("owner_email").notNull().default("local@localhost"), deckId: text("deck_id").notNull(), title: text("title").notNull(), data: text("data").notNull(), changeLabel: text("change_label"), createdAt: text("created_at").notNull().default(now()), }); export const designSystems = table("design_systems", { id: text("id").primaryKey(), title: text("title").notNull(), description: text("description"), data: text("data").notNull(), assets: text("assets"), customInstructions: text("custom_instructions").notNull().default(""), isDefault: integer("is_default", { mode: "boolean" }) .notNull() .default(false), createdAt: text("created_at").default(now()), updatedAt: text("updated_at").default(now()), ...ownableColumns(), }); export const designSystemShares = createSharesTable("design_system_shares"); // Persisted public share-link snapshots (token → deck snapshot). // Replaces the old in-memory Map so links survive server restarts and // work across multiple serverless instances. export const deckShareLinks = table("deck_share_links", { token: text("token").primaryKey(), title: text("title").notNull(), slides: text("slides").notNull(), // JSON array of slide snapshots aspectRatio: text("aspect_ratio"), createdAt: text("created_at").notNull().default(now()), }); export const uploadedAssets = table("uploaded_assets", { id: text("id").primaryKey(), filename: text("filename").notNull(), url: text("url").notNull(), type: text("type").notNull(), size: integer("size").notNull(), provider: text("provider"), ownerEmail: text("owner_email").notNull(), createdAt: text("created_at").notNull().default(now()), }); export const slideComments = table("slide_comments", { id: text("id").primaryKey(), deckId: text("deck_id").notNull(), slideId: text("slide_id").notNull(), threadId: text("thread_id").notNull(), parentId: text("parent_id"), content: text("content").notNull(), quotedText: text("quoted_text"), authorEmail: text("author_email").notNull(), authorName: text("author_name"), resolved: integer("resolved", { mode: "boolean" }).notNull().default(false), createdAt: text("created_at").notNull().default(now()), updatedAt: text("updated_at").notNull().default(now()), });