import { sql } from 'drizzle-orm' import { index, integer, sqliteTable, text } from 'drizzle-orm/sqlite-core' export const pots = sqliteTable('pots', { slug: text('slug').primaryKey(), name: text('name').notNull(), currency: text('currency').notNull(), createdAt: integer('created_at').notNull().default(sql`(unixepoch())`), }) export const participants = sqliteTable('participants', { id: integer('id').primaryKey({ autoIncrement: true }), potSlug: text('pot_slug').notNull().references(() => pots.slug), name: text('name').notNull(), paymentLink: text('payment_link'), createdAt: integer('created_at').notNull().default(sql`(unixepoch())`), }, table => [ index('participants_pot_slug_idx').on(table.potSlug), ]) export const expenses = sqliteTable('expenses', { id: integer('id').primaryKey({ autoIncrement: true }), potSlug: text('pot_slug').notNull().references(() => pots.slug), // 'payment' rows are settlements: payerId is who paid, and the single row // in expenseParticipants is who received it — same shape as a one-person // split expense, which is mathematically what a settlement is. type: text('type').notNull().default('expense'), description: text('description').notNull(), amountCents: integer('amount_cents').notNull(), payerId: integer('payer_id').notNull().references(() => participants.id), createdAt: integer('created_at').notNull().default(sql`(unixepoch())`), }, table => [ index('expenses_pot_slug_idx').on(table.potSlug), ]) export const expenseParticipants = sqliteTable('expense_participants', { expenseId: integer('expense_id').notNull().references(() => expenses.id), participantId: integer('participant_id').notNull().references(() => participants.id), }, table => [ index('expense_participants_expense_id_idx').on(table.expenseId), ])