-- S3-compatible storage for RouterOS backups CREATE TABLE IF NOT EXISTS backup_storage_settings ( id BIGINT PRIMARY KEY CHECK (id = 1), provider TEXT NOT NULL DEFAULT 'local' CHECK (provider IN ('local', 's3')), s3_endpoint TEXT NOT NULL DEFAULT '', s3_region TEXT NOT NULL DEFAULT 'us-east-1', s3_bucket TEXT NOT NULL DEFAULT '', s3_prefix TEXT NOT NULL DEFAULT 'mikrotik', s3_access_key_id TEXT NOT NULL DEFAULT '', s3_secret_access_key TEXT NOT NULL DEFAULT '', s3_force_path_style BOOLEAN NOT NULL DEFAULT TRUE, keep_local_copy BOOLEAN NOT NULL DEFAULT TRUE, last_test_at TIMESTAMPTZ, last_test_error TEXT, updated_at TIMESTAMPTZ NOT NULL DEFAULT now() ); INSERT INTO backup_storage_settings (id) VALUES (1) ON CONFLICT (id) DO NOTHING; ALTER TABLE backup_entries ADD COLUMN IF NOT EXISTS storage TEXT NOT NULL DEFAULT 'local'; ALTER TABLE backup_entries ADD COLUMN IF NOT EXISTS s3_key TEXT; ALTER TABLE backup_entries ADD COLUMN IF NOT EXISTS s3_etag TEXT; ALTER TABLE backup_entries ADD COLUMN IF NOT EXISTS upload_error TEXT; DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'backup_entries_storage_check' ) THEN ALTER TABLE backup_entries ADD CONSTRAINT backup_entries_storage_check CHECK (storage IN ('local', 's3', 'both')); END IF; END $$;