UNPKG

@shabados/database

Version:

A digital representation of Sikh Bani and other Panthic texts.

87 lines (73 loc) 2.06 kB
import { DistributedOmit } from 'bun' import { index, integer, primaryKey, sqliteTable, text } from 'drizzle-orm/sqlite-core' import type { LanguageField, ScriptField } from '#collections-types/common' import type { Lines } from '#collections-types/lines' const json = () => text({ mode: 'json' }) export const assets = sqliteTable('assets', { id: text().primaryKey(), name: json(), reference: json(), }) export const sources = sqliteTable('sources', { id: text().primaryKey(), name: json().$type<ScriptField>(), translation: json().$type<LanguageField>(), }) export const sections = sqliteTable( 'sections', { id: text().primaryKey(), sourceId: text(), sourceOrder: integer(), name: json().$type<ScriptField>(), description: json().$type<LanguageField>(), }, (t) => [index('source_order_index').on(t.sourceOrder)], ) export const authors = sqliteTable('authors', { id: text().primaryKey(), name: json().$type<ScriptField>(), otherNames: json().$type<ScriptField[]>(), }) export const lineGroups = sqliteTable( 'line_groups', { id: text().primaryKey(), authorId: text(), sectionId: text(), sectionOrder: integer(), }, (t) => [index('section_order_index').on(t.sectionOrder)], ) export const lines = sqliteTable( 'lines', { id: text().primaryKey(), lineGroupId: text(), lineGroupOrder: integer(), }, (t) => [index('line_group_order_index').on(t.lineGroupOrder)], ) type LinePayload = DistributedOmit<Lines['content'][number], 'asset' | 'data'> export const assetLines = sqliteTable( 'asset_lines', { assetId: text(), lineId: text(), type: text(), data: text(), additional: json().$type<LinePayload>(), priority: integer(), }, (t) => [index('priority_index').on(t.priority)], ) export const banis = sqliteTable('banis', { id: text().primaryKey(), name: json().$type<ScriptField>(), }) export const baniLines = sqliteTable('bani_lines', { baniId: text(), lineId: text(), sectionOrder: integer(), lineOrder: integer(), })