import { sqliteTable, text, integer, real } from 'drizzle-orm/sqlite-core'; export const users = sqliteTable('users', { id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()), googleId: text('google_id').unique(), email: text('email').unique().notNull(), name: text('name'), avatarUrl: text('avatar_url'), accessToken: text('access_token'), refreshToken: text('refresh_token'), tokenExpires: text('token_expires'), role: text('role', { enum: ['admin', 'editor', 'viewer'] }).default('viewer'), createdAt: text('created_at').$defaultFn(() => new Date().toISOString()), updatedAt: text('updated_at').$defaultFn(() => new Date().toISOString()), }); export const transactions = sqliteTable('transactions', { id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()), emailId: text('email_id').unique().notNull(), userId: text('user_id').references(() => users.id), date: text('date').notNull(), sender: text('sender').notNull(), amount: real('amount').notNull(), currency: text('currency').default('CAD'), reference: text('reference'), message: text('message'), recipientEmail: text('recipient_email'), branch: text('branch'), status: text('status', { enum: ['deposited', 'pending', 'expired', 'cancelled'] }), rawEmail: text('raw_email'), rawEmailHtml: text('raw_email_html'), envelopeNumber: text('envelope_number'), screenshotOriginal: text('screenshot_original'), screenshotPreview: text('screenshot_preview'), parsedAt: text('parsed_at').$defaultFn(() => new Date().toISOString()), reviewed: integer('reviewed', { mode: 'boolean' }).default(false), reviewedBy: text('reviewed_by').references(() => users.id), createdAt: text('created_at').$defaultFn(() => new Date().toISOString()), }); export const branchConfig = sqliteTable('branch_config', { id: integer('id').primaryKey({ autoIncrement: true }), email: text('email').unique().notNull(), branch: text('branch').notNull(), active: integer('active', { mode: 'boolean' }).default(true), updatedAt: text('updated_at').$defaultFn(() => new Date().toISOString()), }); export const scanLogs = sqliteTable('scan_logs', { id: integer('id').primaryKey({ autoIncrement: true }), userId: text('user_id').references(() => users.id), scanPreset: text('scan_preset', { enum: ['today', 'last7days', 'custom'] }), scanStartDate: text('scan_start_date').notNull(), scanEndDate: text('scan_end_date').notNull(), forceRescan: integer('force_rescan', { mode: 'boolean' }).default(false), startedAt: text('started_at').notNull(), finishedAt: text('finished_at'), emailsFound: integer('emails_found').default(0), emailsParsed: integer('emails_parsed').default(0), emailsSkipped: integer('emails_skipped').default(0), errors: integer('errors').default(0), errorDetails: text('error_details'), aiProvider: text('ai_provider'), aiModel: text('ai_model'), createdAt: text('created_at').$defaultFn(() => new Date().toISOString()), }); export const envelopes = sqliteTable('envelopes', { id: integer('id').primaryKey({ autoIncrement: true }), envelopeNumber: text('envelope_number').notNull(), businessName: text('business_name'), name: text('name').notNull(), email: text('email'), }); export const aiSettings = sqliteTable('ai_settings', { id: integer('id').primaryKey({ autoIncrement: true }), userId: text('user_id').references(() => users.id), provider: text('provider').notNull(), model: text('model').notNull(), apiKey: text('api_key'), baseUrl: text('base_url'), isActive: integer('is_active', { mode: 'boolean' }).default(true), createdAt: text('created_at').$defaultFn(() => new Date().toISOString()), });