a homebrewed DnD campaign based in the Honkai: Star Rail universe
hsr honkaistarrail dnd
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

db: use indexed expressions on name columns

+36 -21
+1 -1
app/drizzle.config.ts
··· 10 10 export default defineConfig({ 11 11 out: './drizzle', 12 12 dialect: 'postgresql', 13 - schema: './src/lib/server/db/schemas/*', 13 + schema: './src/lib/server/**/db-schema.ts', 14 14 dbCredentials: { url: process.env.DATABASE_URL }, 15 15 verbose: true, 16 16 strict: false,
+2 -1
app/src/lib/server/background/db-schema.ts
··· 1 1 import { index, integer, pgTable, primaryKey, text } from 'drizzle-orm/pg-core' 2 + import { lower } from '$server/db/expressions' 2 3 import { equipment, tool } from '$server/equipment/db-schema' 3 4 import { feat } from '$server/feat/db-schema' 4 5 import { ability, skill } from '$server/mechanic/db-schema' ··· 20 21 .notNull() 21 22 .references(() => feat.id), 22 23 }, 23 - (table) => [index().on(table.name)], 24 + (table) => [index('background_idx_lower_name').on(lower(table.name))], 24 25 ) 25 26 26 27 export const backgroundAbility = pgTable(
+2 -1
app/src/lib/server/campaign/db-schema.ts
··· 1 1 import { boolean, index, integer, pgTable, primaryKey, text, timestamp } from 'drizzle-orm/pg-core' 2 2 import { user } from '$server/auth/db-schema' 3 + import { lower } from '$server/db/expressions' 3 4 import { sourcebook } from '$server/sourcebook/db-schema' 4 5 5 6 export const campaign = pgTable( ··· 14 15 createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), 15 16 endedAt: timestamp('ended_at', { withTimezone: true }), 16 17 }, 17 - (table) => [index().on(table.name)], 18 + (table) => [index('campaign_idx_lower_name').on(lower(table.name))], 18 19 ) 19 20 20 21 export const campaignMember = pgTable('campaign_member', {
+3
app/src/lib/server/character/db-schema.ts
··· 1 1 import { gte, sql } from 'drizzle-orm' 2 2 import { 3 3 check, 4 + index, 4 5 integer, 5 6 pgTable, 6 7 primaryKey, ··· 13 14 import { background } from '$server/background/db-schema' 14 15 import { campaign } from '$server/campaign/db-schema' 15 16 import { characterClass } from '$server/class/db-schema' 17 + import { lower } from '$server/db/expressions' 16 18 import { equipment } from '$server/equipment/db-schema' 17 19 import { language } from '$server/language/db-schema' 18 20 import { condition, damage } from '$server/mechanic/db-schema' ··· 47 49 .notNull(), 48 50 }, 49 51 (table) => [ 52 + index('character_idx_lower_name').on(lower(table.name)), 50 53 check('level_is_valid', sql`${table.level} >= 0 AND ${table.level} <= 20`), 51 54 check( 52 55 'current_hp_is_valid',
+4 -3
app/src/lib/server/class/db-schema.ts
··· 9 9 text, 10 10 timestamp, 11 11 } from 'drizzle-orm/pg-core' 12 + import { lower } from '$server/db/expressions' 12 13 import { sourcebook } from '$server/sourcebook/db-schema' 13 14 14 15 export const characterClass = pgTable( ··· 22 23 description: text('description').notNull(), 23 24 createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), 24 25 }, 25 - (table) => [index().on(table.name)], 26 + (table) => [index('character_class_idx_lower_name').on(lower(table.name))], 26 27 ) 27 28 28 29 export const characterClassFeature = pgTable( ··· 37 38 description: text('description').notNull(), 38 39 }, 39 40 (table) => [ 40 - index().on(table.name), 41 + index('character_class_feature_idx_lower_name').on(lower(table.name)), 41 42 check('level_is_valid', sql`${table.level} >= 1 AND ${table.level} <= 20`), 42 43 ], 43 44 ) ··· 53 54 description: text('description').notNull(), 54 55 logic: jsonb('logic').notNull(), 55 56 }, 56 - (table) => [index().on(table.name)], 57 + (table) => [index(`character_class_feature_mod_idx_lower_name`).on(table.name)], 57 58 )
+3 -2
app/src/lib/server/equipment/db-schema.ts
··· 11 11 text, 12 12 timestamp, 13 13 } from 'drizzle-orm/pg-core' 14 + import { lower } from '$server/db/expressions' 14 15 import { ability } from '$server/mechanic/db-schema' 15 16 import { sourcebook } from '$server/sourcebook/db-schema' 16 17 ··· 33 34 .$onUpdate(() => /* @__PURE__ */ new Date()) 34 35 .notNull(), 35 36 }, 36 - (table) => [index().on(table.name)], 37 + (table) => [index('equipment_idx_lower_name').on(lower(table.name))], 37 38 ) 38 39 39 40 export const tool = pgTable('tool', { ··· 78 79 id: integer('id').primaryKey().generatedAlwaysAsIdentity(), 79 80 name: text('name').unique().notNull(), 80 81 }, 81 - (table) => [index().on(table.name)], 82 + (table) => [index('equipment_category_idx_lower_name').on(lower(table.name))], 82 83 ) 83 84 84 85 export const equipmentCategories = pgTable(
+1 -1
app/src/lib/server/faction/db-schema.ts
··· 23 23 description: text('description').notNull(), 24 24 }, 25 25 (table) => [ 26 - index().on(table.name), 26 + index('faction_idx_lower_name').on(table.name), 27 27 foreignKey({ columns: [table.parentFactionId], foreignColumns: [table.id] }), 28 28 ], 29 29 )
+2 -1
app/src/lib/server/feat/db-schema.ts
··· 1 1 import { boolean, index, integer, pgTable, text } from 'drizzle-orm/pg-core' 2 + import { lower } from '$server/db/expressions' 2 3 3 4 export const feat = pgTable( 4 5 'feat', ··· 8 9 description: text('description').notNull(), 9 10 isRepeatable: boolean('is_repeatable').default(false).notNull(), 10 11 }, 11 - (table) => [index().on(table.name)], 12 + (table) => [index('feat_idx_lower_name').on(lower(table.name))], 12 13 )
+2 -1
app/src/lib/server/language/db-schema.ts
··· 1 1 import { index, integer, pgTable, text } from 'drizzle-orm/pg-core' 2 + import { lower } from '$server/db/expressions' 2 3 import { sourcebook } from '$server/sourcebook/db-schema' 3 4 4 5 export const language = pgTable( ··· 10 11 .references(() => sourcebook.id), 11 12 name: text('name').notNull(), 12 13 }, 13 - (table) => [index().on(table.name)], 14 + (table) => [index('language_idx_lower_name').on(lower(table.name))], 14 15 )
+5 -4
app/src/lib/server/mechanic/db-schema.ts
··· 1 1 import { boolean, index, integer, pgTable, text } from 'drizzle-orm/pg-core' 2 + import { lower } from '$server/db/expressions' 2 3 import { sourcebook } from '$server/sourcebook/db-schema' 3 4 4 5 export const condition = pgTable( ··· 11 12 name: text('name').notNull(), 12 13 hasLevels: boolean('has_levels').notNull(), 13 14 }, 14 - (table) => [index().on(table.name)], 15 + (table) => [index('mechanic_idx_lower_name').on(lower(table.name))], 15 16 ) 16 17 17 18 export const damage = pgTable( ··· 24 25 name: text('name').notNull(), 25 26 description: text('description').notNull(), 26 27 }, 27 - (table) => [index().on(table.name)], 28 + (table) => [index('damage_idx_lower_name').on(lower(table.name))], 28 29 ) 29 30 30 31 export const ability = pgTable( ··· 34 35 name: text('name').notNull(), 35 36 description: text('description').notNull(), 36 37 }, 37 - (table) => [index().on(table.name)], 38 + (table) => [index('ability_idx_lower_name').on(lower(table.name))], 38 39 ) 39 40 40 41 export const skill = pgTable( ··· 47 48 name: text('name').notNull(), 48 49 description: text('description').notNull(), 49 50 }, 50 - (table) => [index().on(table.name)], 51 + (table) => [index('skill_idx_lower_name').on(lower(table.name))], 51 52 )
+2 -1
app/src/lib/server/monster/db-schema.ts
··· 10 10 text, 11 11 } from 'drizzle-orm/pg-core' 12 12 import { campaignSession } from '$server/campaign/db-schema' 13 + import { lower } from '$server/db/expressions' 13 14 import { damage } from '$server/mechanic/db-schema' 14 15 import { sourcebook } from '$server/sourcebook/db-schema' 15 16 ··· 31 32 canHover: boolean('can_hover').default(false).notNull(), 32 33 }, 33 34 (table) => [ 34 - index().on(table.name), 35 + index('monster_idx_lower_name').on(lower(table.name)), 35 36 check('walk_speed_is_nonnegative', gte(table.walkSpeed, 0)), 36 37 check('swim_speed_is_nonnegative', gte(table.swimSpeed, 0)), 37 38 check('climb_speed_is_nonnegative', gte(table.climbSpeed, 0)),
+2 -1
app/src/lib/server/readable/db-schema.ts
··· 1 1 import { index, integer, pgTable, text } from 'drizzle-orm/pg-core' 2 + import { lower } from '$server/db/expressions' 2 3 import { faction } from '$server/faction/db-schema' 3 4 import { sourcebook } from '$server/sourcebook/db-schema' 4 5 ··· 16 17 summary: text('summary').notNull(), 17 18 text: text('text').notNull(), 18 19 }, 19 - (table) => [index().on(table.title)], 20 + (table) => [index('readable_idx_lower_title').on(lower(table.title))], 20 21 )
+2 -1
app/src/lib/server/sourcebook/db-schema.ts
··· 1 1 import { index, integer, pgTable, timestamp, text, primaryKey } from 'drizzle-orm/pg-core' 2 + import { lower } from '$server/db/expressions' 2 3 3 4 export const sourcebook = pgTable( 4 5 'sourcebook', ··· 9 10 createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), 10 11 archivedAt: timestamp('archived_at', { withTimezone: true }), 11 12 }, 12 - (table) => [index().on(table.name)], 13 + (table) => [index('sourcebook_idx_lower_name').on(lower(table.name))], 13 14 ) 14 15 15 16 export const genre = pgTable('genre', {
+3 -2
app/src/lib/server/species/db-schema.ts
··· 10 10 text, 11 11 check, 12 12 } from 'drizzle-orm/pg-core' 13 + import { lower } from '$server/db/expressions' 13 14 import { sourcebook } from '$server/sourcebook/db-schema' 14 15 15 16 export const species = pgTable( ··· 31 32 createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), 32 33 }, 33 34 (table) => [ 34 - index().on(table.name), 35 + index('species_idx_lower_name').on(lower(table.name)), 35 36 check('walk_speed_is_nonnegative', gte(table.walkSpeed, 0)), 36 37 check('swim_speed_is_nonnegative', gte(table.swimSpeed, 0)), 37 38 check('climb_speed_is_nonnegative', gte(table.climbSpeed, 0)), ··· 54 55 name: text('name').notNull(), 55 56 description: text('description').notNull(), 56 57 }, 57 - (table) => [index().on(table.name)], 58 + (table) => [index('species_feature_lower_name').on(lower(table.name))], 58 59 ) 59 60 60 61 export const speciesFeatureMod = pgTable('species_feature_mod', {
+2 -1
app/src/lib/server/spell/db-schema.ts
··· 11 11 check, 12 12 pgEnum, 13 13 } from 'drizzle-orm/pg-core' 14 + import { lower } from '$server/db/expressions' 14 15 import { damage } from '$server/mechanic/db-schema' 15 16 import { sourcebook } from '$server/sourcebook/db-schema' 16 17 ··· 50 51 .notNull(), 51 52 }, 52 53 (table) => [ 53 - index().on(table.name), 54 + index('spell_idx_lower_name').on(lower(table.name)), 54 55 check('level_is_valid', sql`${table.level} >= 0 AND ${table.level} <= 9`), 55 56 ], 56 57 )