getAttribute(\PDO::ATTR_DRIVER_NAME); if ($driver === 'pgsql') { self::ensurePgsql($pdo); return; } if ($driver === 'sqlite') { self::ensureSqlite($pdo); return; } self::ensureGeneric($pdo); } private static function ensurePgsql(\PDO $pdo): void { $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_modules ( name TEXT PRIMARY KEY, title TEXT, version TEXT, enabled BOOLEAN NOT NULL DEFAULT false, installed_at TIMESTAMPTZ, updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_module_settings ( name TEXT PRIMARY KEY, settings TEXT NOT NULL DEFAULT '{}', updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_settings ( key TEXT PRIMARY KEY, value TEXT, updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_users ( id BIGSERIAL PRIMARY KEY, email TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL, role TEXT NOT NULL DEFAULT 'user', is_active BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() )" ); } private static function ensureSqlite(\PDO $pdo): void { $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_modules ( name TEXT PRIMARY KEY, title TEXT, version TEXT, enabled INTEGER NOT NULL DEFAULT 0, installed_at TEXT, updated_at TEXT NOT NULL DEFAULT (datetime('now')) )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_module_settings ( name TEXT PRIMARY KEY, settings TEXT NOT NULL DEFAULT '{}', updated_at TEXT NOT NULL DEFAULT (datetime('now')) )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_settings ( key TEXT PRIMARY KEY, value TEXT, updated_at TEXT NOT NULL DEFAULT (datetime('now')) )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_users ( id INTEGER PRIMARY KEY AUTOINCREMENT, email TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL, role TEXT NOT NULL DEFAULT 'user', is_active INTEGER NOT NULL DEFAULT 1, created_at TEXT NOT NULL DEFAULT (datetime('now')) )" ); } private static function ensureGeneric(\PDO $pdo): void { $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_modules ( name VARCHAR(190) PRIMARY KEY, title VARCHAR(190), version VARCHAR(64), enabled TINYINT NOT NULL DEFAULT 0, installed_at DATETIME, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_module_settings ( name VARCHAR(190) PRIMARY KEY, settings TEXT NOT NULL, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_settings ( `key` VARCHAR(190) PRIMARY KEY, `value` TEXT, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP )" ); $pdo->exec( "CREATE TABLE IF NOT EXISTS nexus_users ( id BIGINT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(190) NOT NULL UNIQUE, password_hash TEXT NOT NULL, role VARCHAR(32) NOT NULL DEFAULT 'user', is_active TINYINT NOT NULL DEFAULT 1, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP )" ); } }