Data Layer

Database & Drizzle ORM

Working with Neon Serverless Postgres, relational schemas, migrations, and Drizzle queries.

Schemas are defined using Drizzle ORM with full relational exports, indexes, and automatic timestamp updates:

src/lib/server/db/schema.ts
export const purchases = pgTable('purchases', {
  id: serial('id').primaryKey(),
  transactionId: text('transaction_id').notNull().unique(),
  userId: text('user_id').references(() => user.id, { onDelete: 'cascade' }),
  productId: text('product_id').notNull(),
  licenseKey: text('license_key').notNull().unique(),
  status: text('status').default('active').notNull(),
  createdAt: timestamp('created_at').defaultNow().notNull()
});

Manage migrations, push schema changes, or launch Drizzle Studio with pre-configured scripts:

terminal
pnpm db:push     # Synchronize schema directly with Neon Postgres
pnpm db:studio   # Launch local visual database GUI
pnpm db:generate # Generate migration SQL files
pnpm db:migrate  # Run migration bundle in production