setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } return $pdo; } function initDb() { $db = getDb(); $db->exec(' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL, role TEXT NOT NULL CHECK (role IN ("admin","dev")) ); '); $db->exec(' CREATE TABLE IF NOT EXISTS sites ( id INTEGER PRIMARY KEY AUTOINCREMENT, domain TEXT NOT NULL UNIQUE, owner_id INTEGER, created_at TEXT NOT NULL, FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE SET NULL ); '); // Seed initial admin if no users exist $count = (int) $db->query('SELECT COUNT(*) FROM users')->fetchColumn(); if ($count === 0) { $hash = password_hash('change-me', PASSWORD_DEFAULT); $stmt = $db->prepare('INSERT INTO users (username, password_hash, role) VALUES (?, ?, ?)'); $stmt->execute(['admin', $hash, 'admin']); return ['adminCreated' => true, 'username' => 'admin', 'password' => 'change-me']; } return ['adminCreated' => false]; }