import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'; export const users = sqliteTable('users', { id: text('id').primaryKey(), email: text('email').notNull().unique(), name: text('name'), image: text('image'), googleId: text('google_id').unique(), consentGiven: integer('consent_given', { mode: 'boolean' }).notNull().default(false), consentAt: text('consent_at'), createdAt: text('created_at').notNull(), deletedAt: text('deleted_at'), }); export const integrationTokens = sqliteTable('integration_tokens', { id: text('id').primaryKey(), userId: text('user_id').notNull().references(() => users.id), provider: text('provider').notNull(), // 'todoist' accessToken: text('access_token').notNull(), refreshToken: text('refresh_token'), expiresAt: text('expires_at'), connectedAt: text('connected_at').notNull(), }); export const tipFeedback = sqliteTable('tip_feedback', { id: text('id').primaryKey(), userId: text('user_id').notNull().references(() => users.id), tipId: text('tip_id').notNull(), action: text('action').notNull(), // 'done' | 'dismiss' | 'snooze' sourceId: text('source_id'), createdAt: text('created_at').notNull(), }); // Each row = one tip served. Join with tipFeedback on tipId to compute reaction rate + dwell. export const tipViews = sqliteTable('tip_views', { id: text('id').primaryKey(), userId: text('user_id').notNull().references(() => users.id), tipId: text('tip_id').notNull(), servedAt: text('served_at').notNull(), }); export const sessions = sqliteTable('sessions', { id: text('id').primaryKey(), userId: text('user_id').notNull().references(() => users.id), expiresAt: text('expires_at').notNull(), createdAt: text('created_at').notNull(), });