Files
kunstenkamp/packages/db/src/schema/registrations.ts
2026-03-03 11:06:24 +01:00

40 lines
1.5 KiB
TypeScript

import { sql } from "drizzle-orm";
import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
export const registration = sqliteTable(
"registration",
{
id: text("id").primaryKey(),
firstName: text("first_name").notNull(),
lastName: text("last_name").notNull(),
email: text("email").notNull(),
phone: text("phone"),
// registrationType: 'performer' | 'watcher'
registrationType: text("registration_type").notNull().default("watcher"),
// Performer-specific fields
artForm: text("art_form"),
experience: text("experience"),
isOver16: integer("is_over_16", { mode: "boolean" })
.notNull()
.default(false),
// Watcher-specific fields
drinkCardValue: integer("drink_card_value").default(0),
// Guests: JSON array of {firstName, lastName, email?, phone?} objects
guests: text("guests"),
// Shared
extraQuestions: text("extra_questions"),
managementToken: text("management_token").unique(),
cancelledAt: integer("cancelled_at", { mode: "timestamp_ms" }),
createdAt: integer("created_at", { mode: "timestamp_ms" })
.default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
.notNull(),
},
(table) => [
index("registration_email_idx").on(table.email),
index("registration_registrationType_idx").on(table.registrationType),
index("registration_artForm_idx").on(table.artForm),
index("registration_createdAt_idx").on(table.createdAt),
index("registration_managementToken_idx").on(table.managementToken),
],
);