1
0
Fork 0
gmscreen/src/db/schema.ts
2024-11-17 23:33:43 -07:00

71 lines
2 KiB
TypeScript

import { sql, relations } from "drizzle-orm";
import { int, sqliteTable as table, text } from "drizzle-orm/sqlite-core";
export const publisherTable = table("publisher", {
id: int().primaryKey({ autoIncrement: true }),
name: text().notNull().unique(),
url: text().notNull().unique(),
});
export const publisherRelations = relations(publisherTable, ({ many }) => ({
sources: many(sourceTable)
}))
export const sourceTable = table("source", {
id: int().primaryKey({ autoIncrement: true }),
name: text().notNull().unique(),
url: text().notNull().unique(),
publisherId: int("publisher_id"),
});
export const sourceRelations = relations(sourceTable, ({ one, many }) => ({
publisher: one(publisherTable, {
fields: [sourceTable.publisherId],
references: [publisherTable.id],
}),
chunks: many(chunkTable)
}))
export const chunkTable = table("chunk", {
id: int().primaryKey({ autoIncrement: true }),
name: text().notNull(),
pages: text("pages", { mode: "json" }).notNull().$type<string[]>().default(sql`'[]'`),
sourceId: int("source_id"),
});
export const chunkRelations = relations(chunkTable, ({ one, many }) => ({
source: one(sourceTable, {
fields: [chunkTable.sourceId],
references: [sourceTable.id],
}),
tables: many(tableTable)
}))
export const tableTable = table("table", {
id: int().primaryKey({ autoIncrement: true }),
name: text(),
order: int().notNull().default(sql`0`),
chunkId: int("chunk_id"),
});
export const tableRelations = relations(tableTable, ({ one, many }) => ({
chunk: one(chunkTable, {
fields: [tableTable.chunkId],
references: [chunkTable.id],
}),
outcomes: many(outcomeTable)
}))
export const outcomeTable = table("outcome", {
id: int().primaryKey({ autoIncrement: true }),
name: text().notNull(),
roll: int().notNull(),
tableId: int("table_id"),
});
export const outcomeRelations = relations(outcomeTable, ({ one }) => ({
table: one(tableTable, {
fields: [outcomeTable.tableId],
references: [tableTable.id],
})
}))