35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { sqliteTable, text, integer, uniqueIndex } from 'drizzle-orm/sqlite-core';
|
|
import { relations, sql } from 'drizzle-orm';
|
|
import { dataset_entry } from './dataset_entry';
|
|
import { experiment } from './experiment';
|
|
|
|
export const participant = sqliteTable(
|
|
'participant',
|
|
{
|
|
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
experimentId: integer('experiment_id').references(() => experiment.id),
|
|
userId: text('user_id').notNull(),
|
|
calibrationAnswers: text('calibration_answers', { mode: 'json' }),
|
|
createdAt: integer('created_at', { mode: 'timestamp' })
|
|
.notNull()
|
|
.default(sql`(unixepoch())`),
|
|
updatedAt: integer('updated_at', { mode: 'timestamp' })
|
|
.notNull()
|
|
.default(sql`(unixepoch())`)
|
|
.$onUpdate(() => sql`(unixepoch())`),
|
|
},
|
|
(table) => ({
|
|
uniqueParticipant: uniqueIndex('unique_participant').on(table.experimentId, table.userId),
|
|
})
|
|
);
|
|
|
|
export const participantRelations = relations(participant, ({ one }) => ({
|
|
experiment: one(experiment, {
|
|
fields: [participant.experimentId],
|
|
references: [experiment.id],
|
|
})
|
|
}));
|
|
|
|
export type Participant = typeof participant.$inferSelect;
|
|
export type NewParticipant = typeof participant.$inferInsert;
|