CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, preferred_language TEXT NOT NULL DEFAULT 'en', preferred_font TEXT NOT NULL DEFAULT 'default' ); CREATE TABLE IF NOT EXISTS routers ( id INTEGER PRIMARY KEY, owner_id INTEGER NOT NULL REFERENCES users(id), name TEXT NOT NULL, device_type TEXT NOT NULL DEFAULT 'routeros', host TEXT NOT NULL, port INTEGER NOT NULL DEFAULT 22, ssh_user TEXT NOT NULL DEFAULT 'admin', ssh_key TEXT, ssh_password TEXT, last_connection_status INTEGER, last_connection_tested_at TEXT, last_connection_error TEXT, last_connection_hostname TEXT, last_connection_model TEXT, last_connection_version TEXT, last_connection_uptime TEXT, last_connection_transport TEXT, last_connection_server TEXT, last_connection_auth_mode TEXT, last_connection_http_status TEXT, last_connection_backup_available INTEGER, disable_all_backups INTEGER NOT NULL DEFAULT 0, disable_export_backups INTEGER NOT NULL DEFAULT 0, disable_binary_backups INTEGER NOT NULL DEFAULT 0, disable_ping INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS backups ( id INTEGER PRIMARY KEY, router_id INTEGER NOT NULL REFERENCES routers(id) ON DELETE CASCADE, file_path TEXT NOT NULL, file_name TEXT NOT NULL, backup_type TEXT NOT NULL DEFAULT 'export', checksum TEXT, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS operation_logs ( id INTEGER PRIMARY KEY, message TEXT NOT NULL, timestamp TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS global_settings ( id INTEGER PRIMARY KEY, backup_retention_days INTEGER DEFAULT 7, log_retention_days INTEGER DEFAULT 7, export_cron TEXT DEFAULT '', binary_cron TEXT DEFAULT '', retention_cron TEXT DEFAULT '', enable_auto_export INTEGER DEFAULT 0, connection_test_interval_minutes INTEGER DEFAULT 0, global_ssh_key TEXT, default_switchos_username TEXT, default_switchos_password TEXT, pushover_token TEXT, pushover_userkey TEXT, notify_failures_only INTEGER DEFAULT 1, smtp_host TEXT, smtp_port INTEGER DEFAULT 587, smtp_login TEXT, smtp_password TEXT, smtp_notifications_enabled INTEGER DEFAULT 0, recipient_email TEXT ); CREATE INDEX IF NOT EXISTS ix_routers_owner_id ON routers(owner_id); CREATE INDEX IF NOT EXISTS ix_backups_router_id ON backups(router_id); CREATE INDEX IF NOT EXISTS ix_backups_created_at ON backups(created_at); CREATE INDEX IF NOT EXISTS ix_operation_logs_timestamp ON operation_logs(timestamp); CREATE TABLE IF NOT EXISTS rust_schema_migrations ( version INTEGER PRIMARY KEY, applied_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP );