import { sql } from "drizzle-orm"; import { integer, sqliteTable, text, uniqueIndex } from "drizzle-orm/sqlite-core"; import { users } from "./users.js"; import { mediaItems } from "./media-items.js"; export const danmakuDocs = sqliteTable( "danmaku_docs", { id: text("id") .primaryKey() .$defaultFn(() => crypto.randomUUID()), userId: text("user_id") .notNull() .references(() => users.id, { onDelete: "cascade" }), mediaItemId: text("media_item_id") .notNull() .references(() => mediaItems.id, { onDelete: "cascade" }), /** `open-network` | `local-xml` */ source: text("source").notNull(), xml: text("xml").notNull(), byteSize: integer("byte_size").notNull().default(0), createdAt: integer("created_at", { mode: "timestamp" }) .notNull() .default(sql`(unixepoch())`), updatedAt: integer("updated_at", { mode: "timestamp" }) .notNull() .default(sql`(unixepoch())`), }, (t) => [uniqueIndex("danmaku_docs_user_media_src_uq").on(t.userId, t.mediaItemId, t.source)], ); export type DanmakuDocRow = typeof danmakuDocs.$inferSelect; export type NewDanmakuDocRow = typeof danmakuDocs.$inferInsert;