/** * SQLite local — controle de agentes (auth + config) * Login unificado: todos os usuarios na tabela agentes com coluna 'role' */ const Database = require('better-sqlite3'); const path = require('path'); const DB_PATH = path.join(__dirname, '..', 'data', 'agentes.db'); const db = new Database(DB_PATH); // WAL mode for better concurrency db.pragma('journal_mode = WAL'); // Create tables db.exec(` CREATE TABLE IF NOT EXISTS agentes ( id INTEGER PRIMARY KEY AUTOINCREMENT, email TEXT UNIQUE NOT NULL, senha_hash TEXT NOT NULL, agente_id INTEGER NOT NULL, nome TEXT NOT NULL, role TEXT DEFAULT 'agente', ativo INTEGER DEFAULT 1, created_at TEXT DEFAULT (datetime('now')) ) `); // Add role column if it doesn't exist (migration for existing databases) try { db.exec(`ALTER TABLE agentes ADD COLUMN role TEXT DEFAULT 'agente'`); } catch (e) { // Column already exists, ignore } // Legacy table - keep for reference but no longer used db.exec(` CREATE TABLE IF NOT EXISTS admins ( id INTEGER PRIMARY KEY AUTOINCREMENT, email TEXT UNIQUE NOT NULL, senha_hash TEXT NOT NULL, nome TEXT NOT NULL, created_at TEXT DEFAULT (datetime('now')) ) `); // Migrate existing admins to agentes table with role='admin' const admins = db.prepare('SELECT * FROM admins').all(); for (const admin of admins) { try { db.prepare(` INSERT OR IGNORE INTO agentes (email, senha_hash, nome, role, agente_id, ativo) VALUES (?, ?, ?, 'admin', 0, 1) `).run(admin.email, admin.senha_hash, admin.nome); } catch (e) { // Email already exists in agentes, skip } } module.exports = db;