Add recordTypes table with relations and auto-created indexes.
This commit is contained in:
parent
86fdbb9ac5
commit
6df86a1691
@ -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)
|
||||
}))
|
||||
|
||||
32
src/lib/server/db/schema/records.ts
Normal file
32
src/lib/server/db/schema/records.ts
Normal file
@ -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<IndexBuilder>
|
||||
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]
|
||||
})
|
||||
}))
|
||||
Loading…
Reference in New Issue
Block a user