Spaces:
Sleeping
Sleeping
| import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core"; | |
| import { sql } from "drizzle-orm"; | |
| import { usersTable } from "./users"; | |
| import { filesTable } from "./files"; | |
| export const CONVERSION_STATUSES = [ | |
| "queued", "analyzing", "routing", "ocr", "layout", "scoring", "merging", "cleanup", "done", "failed" | |
| ] as const; | |
| export type ConversionStatus = (typeof CONVERSION_STATUSES)[number]; | |
| export const conversionsTable = sqliteTable("conversions", { | |
| id: text("id").primaryKey().$defaultFn(() => crypto.randomUUID()), | |
| fileId: text("file_id").notNull().references(() => filesTable.id, { onDelete: "cascade" }), | |
| userId: text("user_id").notNull().references(() => usersTable.id, { onDelete: "cascade" }), | |
| status: text("status", { enum: CONVERSION_STATUSES }).notNull().default("queued"), | |
| progress: integer("progress").notNull().default(0), | |
| steps: text("steps", { mode: "json" }).notNull().$type<unknown[]>().default([]), | |
| pageStart: integer("page_start"), | |
| pageEnd: integer("page_end"), | |
| elapsedSeconds: integer("elapsed_seconds"), | |
| estimatedSeconds: integer("estimated_seconds"), | |
| errorMessage: text("error_message"), | |
| startedAt: integer("started_at", { mode: "timestamp_ms" }), | |
| completedAt: integer("completed_at", { mode: "timestamp_ms" }), | |
| createdAt: integer("created_at", { mode: "timestamp_ms" }).notNull().default(sql`(unixepoch() * 1000)`), | |
| }); | |
| export type Conversion = typeof conversionsTable.$inferSelect; | |