import Database from 'better-sqlite3'; // Use a file-based database in development const db = new Database('local.db'); db.pragma('journal_mode = WAL'); // --- SCHEMA CREATION --- // Auth.js tables db.exec(` CREATE TABLE IF NOT EXISTS users ( id TEXT PRIMARY KEY, name TEXT, email TEXT UNIQUE, emailVerified INTEGER, image TEXT, password TEXT ) `); db.exec(` CREATE TABLE IF NOT EXISTS accounts ( userId TEXT NOT NULL, type TEXT NOT NULL, provider TEXT NOT NULL, providerAccountId TEXT NOT NULL, refresh_token TEXT, access_token TEXT, expires_at INTEGER, token_type TEXT, scope TEXT, id_token TEXT, session_state TEXT, PRIMARY KEY (provider, providerAccountId), FOREIGN KEY (userId) REFERENCES users (id) ON DELETE CASCADE ) `); db.exec(` CREATE TABLE IF NOT EXISTS sessions ( sessionToken TEXT NOT NULL PRIMARY KEY, userId TEXT NOT NULL, expires INTEGER NOT NULL, FOREIGN KEY (userId) REFERENCES users (id) ON DELETE CASCADE ) `); db.exec(` CREATE TABLE IF NOT EXISTS verification_tokens ( identifier TEXT NOT NULL, token TEXT NOT NULL, expires INTEGER NOT NULL, PRIMARY KEY (identifier, token) ) `); db.exec(` CREATE TABLE IF NOT EXISTS settings ( key TEXT PRIMARY KEY, value TEXT ) `); db.exec(` CREATE TABLE IF NOT EXISTS email_templates ( id INTEGER PRIMARY KEY, subject TEXT, body TEXT ) `); db.exec(` CREATE TABLE IF NOT EXISTS leads ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL, phone TEXT, createdAt DATETIME DEFAULT CURRENT_TIMESTAMP ) `); db.exec(` CREATE TABLE IF NOT EXISTS flows ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, description TEXT, path TEXT NOT NULL UNIQUE, createdAt DATETIME DEFAULT CURRENT_TIMESTAMP, updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP ) `); // --- SEEDING LOGIC --- console.log('Running database checks and seeding if necessary...'); // Seed default user const userStmt = db.prepare('SELECT id FROM users WHERE email = ?'); const defaultUser = userStmt.get('admin@example.com'); if (!defaultUser) { const insertUser = db.prepare( "INSERT INTO users (id, email, password, name) VALUES (?, ?, ?, ?)" ); // Note: In a real app, hash the password! insertUser.run('cl-admin-user-id', 'admin@example.com', 'password', 'Admin User'); console.log('Default user created.'); } // Seed default flow const flowStmt = db.prepare("SELECT id FROM flows WHERE path = ?"); const defaultFlow = flowStmt.get('/'); if (!defaultFlow) { const insertFlow = db.prepare( "INSERT INTO flows (name, description, path) VALUES (?, ?, ?)" ); insertFlow.run('Cost Estimator', 'The main cost estimation tool for clients.', '/'); console.log('Default flow created.'); } console.log('Database setup complete.'); export default db;