diff --git a/shared/database/src/schema.ts b/shared/database/src/schema.ts index 7a9bfc5..6242188 100644 --- a/shared/database/src/schema.ts +++ b/shared/database/src/schema.ts @@ -389,15 +389,19 @@ export const shows = wxyc_schema.table('shows', { export type NewShowDJ = InferInsertModel; export type ShowDJ = InferSelectModel; -export const show_djs = wxyc_schema.table('show_djs', { - show_id: integer('show_id') - .references(() => shows.id) - .notNull(), - dj_id: varchar('dj_id', { length: 255 }) - .references(() => user.id, { onDelete: 'cascade' }) - .notNull(), - active: boolean('active').default(true), -}); +export const show_djs = wxyc_schema.table( + 'show_djs', + { + show_id: integer('show_id') + .references(() => shows.id) + .notNull(), + dj_id: varchar('dj_id', { length: 255 }) + .references(() => user.id, { onDelete: 'cascade' }) + .notNull(), + active: boolean('active').default(true), + }, + (table) => [uniqueIndex('show_djs_show_id_dj_id_unique').on(table.show_id, table.dj_id)] +); //create entry w/ ID 0 for regular shows export type NewSpecialtyShow = InferInsertModel; diff --git a/tests/unit/database/schema.show-djs.test.ts b/tests/unit/database/schema.show-djs.test.ts new file mode 100644 index 0000000..a3bda34 --- /dev/null +++ b/tests/unit/database/schema.show-djs.test.ts @@ -0,0 +1,18 @@ +import { getTableConfig } from 'drizzle-orm/pg-core'; +import { show_djs } from '../../../shared/database/src/schema'; + +describe('show_djs schema', () => { + it('has a unique index on (show_id, dj_id)', () => { + const config = getTableConfig(show_djs); + const uniqueIndexes = config.indexes.filter((idx) => idx.config.unique); + + const showDjIndex = uniqueIndexes.find( + (idx) => + idx.config.columns.length === 2 && + idx.config.columns.some((col) => 'name' in col && col.name === 'show_id') && + idx.config.columns.some((col) => 'name' in col && col.name === 'dj_id') + ); + + expect(showDjIndex).toBeDefined(); + }); +});