setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $pdo->exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, role TEXT DEFAULT 'user')"); $pdo->exec("CREATE TABLE IF NOT EXISTS audit_logs (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, username TEXT, action TEXT, target TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)"); $pdo->exec("CREATE TABLE IF NOT EXISTS settings (config_key TEXT PRIMARY KEY, config_value TEXT NOT NULL)"); $pdo->exec("CREATE TABLE IF NOT EXISTS transactions ( id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, title TEXT NOT NULL, amount REAL NOT NULL, date DATE NOT NULL, category TEXT, is_recurring INTEGER DEFAULT 0, frequency TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP )"); // Dynamische Spalten try { $pdo->exec("ALTER TABLE transactions ADD COLUMN receipt_path TEXT"); } catch (PDOException $e) {} try { $pdo->exec("ALTER TABLE transactions ADD COLUMN company TEXT"); } catch (PDOException $e) {} try { $pdo->exec("ALTER TABLE transactions ADD COLUMN description TEXT"); } catch (PDOException $e) {} try { $pdo->exec("ALTER TABLE transactions ADD COLUMN is_paid INTEGER DEFAULT 1"); } catch (PDOException $e) {} // NEU $pdo->exec("CREATE TABLE IF NOT EXISTS logbook ( id INTEGER PRIMARY KEY AUTOINCREMENT, date DATE NOT NULL, start_location TEXT NOT NULL, end_location TEXT NOT NULL, distance_km REAL NOT NULL, purpose TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP )"); $stmt = $pdo->query("SELECT COUNT(*) FROM users"); if ($stmt->fetchColumn() == 0) { $hash = password_hash('admin', PASSWORD_DEFAULT); $insert = $pdo->prepare("INSERT INTO users (username, password_hash, role) VALUES (?, ?, ?)"); $insert->execute(['admin', $hash, 'admin']); } } catch (PDOException $e) { die(json_encode(['success' => false, 'error' => 'Datenbankfehler: ' . $e->getMessage()])); } ?>