first commit

This commit is contained in:
Mateusz Gruszczyński committed 2026-10-28 09:16:54 +01:00
commit 32a7ba8e8f
168 files changed
+123856

No files matched your search

+80
View File
@@ -0,0 +1,80 @@
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
);
@@ -0,0 +1,5 @@
-- NULL retains the original per-field credential fallback for existing rows.
-- Explicit 1/0 selects one complete source without erasing stored device data.
ALTER TABLE routers ADD COLUMN use_global_switchos_credentials INTEGER
CHECK (use_global_switchos_credentials IS NULL OR use_global_switchos_credentials IN (0, 1));
INSERT INTO rust_schema_migrations (version) VALUES (2);
+17
View File
@@ -0,0 +1,17 @@
-- The plan lives in the same private SQLite database as backup metadata. Files
-- are copied and verified first; all active paths and applied flags commit
-- together. Original files remain available for an explicit rollback.
CREATE TABLE backup_layout_journal (
backup_id INTEGER PRIMARY KEY REFERENCES backups(id) ON DELETE CASCADE,
router_id INTEGER NOT NULL,
backup_type TEXT NOT NULL,
original_path TEXT NOT NULL,
source_path TEXT NOT NULL,
destination_path TEXT NOT NULL,
sha256 TEXT NOT NULL,
copied INTEGER NOT NULL DEFAULT 0 CHECK (copied IN (0,1)),
applied INTEGER NOT NULL DEFAULT 0 CHECK (applied IN (0,1)),
snapshot_path TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO rust_schema_migrations (version) VALUES (3);