33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
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;
|