From 6df86a169150b7cd56a0c2af6e55a8735cfc21d2 Mon Sep 17 00:00:00 2001 From: themodrnhakr Date: Thu, 25 Sep 2025 15:04:27 -0500 Subject: [PATCH] Add recordTypes table with relations and auto-created indexes. --- src/lib/server/db/schema/recordTypes.ts | 6 +++++ src/lib/server/db/schema/records.ts | 32 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/lib/server/db/schema/records.ts diff --git a/src/lib/server/db/schema/recordTypes.ts b/src/lib/server/db/schema/recordTypes.ts index 92031fc..1b97bb9 100644 --- a/src/lib/server/db/schema/recordTypes.ts +++ b/src/lib/server/db/schema/recordTypes.ts @@ -1,6 +1,12 @@ +import { relations } from "drizzle-orm"; import { sqliteTable, integer, text } from "drizzle-orm/sqlite-core"; +import { records } from "./records"; export const recordTypes = sqliteTable('record_types', { id: integer('id').primaryKey({autoIncrement: true}), type: text('type') }) + +export const recordTypesRelations = relations(recordTypes, ({many}) => ({ + records: many(records) +})) diff --git a/src/lib/server/db/schema/records.ts b/src/lib/server/db/schema/records.ts new file mode 100644 index 0000000..e8d31aa --- /dev/null +++ b/src/lib/server/db/schema/records.ts @@ -0,0 +1,32 @@ +import { integer, text, sqliteTable, index, type IndexBuilder } from "drizzle-orm/sqlite-core"; +import { recordTypes } from "./recordTypes"; +import { relations, sql } from "drizzle-orm"; + +type RecordTypeIndexConfig = Array<{ + dbId: number, + name: string +}> +const recordTypeIndexConfig: RecordTypeIndexConfig = [ + {dbId: 1, name: "chores"}, + {dbId: 2, name: "project"}, + {dbId: 3, name: "ticket"}, +] +type RecordTypeIndexGenerator = (x: RecordTypeIndexConfig, y) => Array +const recordTypeIndexGenerator: RecordTypeIndexGenerator = (x, y) => x.map( + entry => index(`${entry.name}_index`).on(y.recordId).where(sql`type_id = ${entry.dbId}`) +) + +export const records = sqliteTable("records", { + id: integer("id").primaryKey({ autoIncrement: true }), + recordId: text("record_id").unique().notNull(), + typeId: integer("type_id").notNull().references(() => recordTypes.id) +}, (table) => [ + ...recordTypeIndexGenerator(recordTypeIndexConfig, table) +]) + +export const recordsRelations = relations(records, ({ one }) => ({ + type: one(recordTypes, { + fields: [records.typeId], + references: [recordTypes.id] + }) +}))