Files
AccountForger-neuerUpload/database/schema_v2.sql
Claude Project Manager 04585e95b6 Initial commit
2025-08-01 23:50:28 +02:00

187 Zeilen
6.6 KiB
SQL

-- Clean Architecture Database Schema v2
-- Erweitert das bestehende Schema um neue Tabellen
-- Session Management
CREATE TABLE IF NOT EXISTS browser_sessions (
id TEXT PRIMARY KEY,
fingerprint_id TEXT NOT NULL,
cookies TEXT NOT NULL, -- JSON encrypted
local_storage TEXT, -- JSON encrypted
session_storage TEXT, -- JSON encrypted
proxy_config TEXT, -- JSON
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
health_score REAL DEFAULT 1.0,
account_id TEXT,
user_agent TEXT,
viewport_width INTEGER DEFAULT 1920,
viewport_height INTEGER DEFAULT 1080,
locale TEXT DEFAULT 'de-DE',
timezone TEXT DEFAULT 'Europe/Berlin',
active BOOLEAN DEFAULT 1,
error_count INTEGER DEFAULT 0,
success_count INTEGER DEFAULT 0,
FOREIGN KEY (fingerprint_id) REFERENCES browser_fingerprints(id),
FOREIGN KEY (account_id) REFERENCES accounts(id)
);
-- Fingerprints
CREATE TABLE IF NOT EXISTS browser_fingerprints (
id TEXT PRIMARY KEY,
canvas_noise_config TEXT NOT NULL, -- JSON
webrtc_config TEXT NOT NULL, -- JSON
fonts TEXT NOT NULL, -- JSON array
hardware_config TEXT NOT NULL, -- JSON
navigator_props TEXT NOT NULL, -- JSON
webgl_vendor TEXT,
webgl_renderer TEXT,
audio_context_config TEXT, -- JSON
timezone TEXT,
timezone_offset INTEGER,
plugins TEXT, -- JSON array
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_rotated TIMESTAMP,
platform_specific TEXT, -- Platform-spezifische Anpassungen
static_components TEXT, -- JSON: Unchangeable hardware/platform values
rotation_seed TEXT, -- Seed for deterministic noise generation
account_bound BOOLEAN DEFAULT 0 -- Is this bound to specific account(s)
);
-- Rate Limiting
CREATE TABLE IF NOT EXISTS rate_limit_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
action_type TEXT NOT NULL,
duration_ms INTEGER NOT NULL,
success BOOLEAN NOT NULL,
response_code INTEGER,
session_id TEXT,
url TEXT,
element_selector TEXT,
error_message TEXT,
retry_count INTEGER DEFAULT 0,
metadata TEXT, -- JSON
FOREIGN KEY (session_id) REFERENCES browser_sessions(id)
);
-- Analytics
CREATE TABLE IF NOT EXISTS account_creation_analytics (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id TEXT UNIQUE NOT NULL,
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
account_id TEXT,
session_id TEXT NOT NULL,
fingerprint_id TEXT NOT NULL,
duration_seconds REAL NOT NULL,
success BOOLEAN NOT NULL,
error_type TEXT,
error_message TEXT,
workflow_steps TEXT NOT NULL, -- JSON
metadata TEXT, -- JSON
total_retry_count INTEGER DEFAULT 0,
network_requests INTEGER DEFAULT 0,
screenshots_taken INTEGER DEFAULT 0,
proxy_used BOOLEAN DEFAULT 0,
proxy_type TEXT,
browser_type TEXT DEFAULT 'chromium',
headless BOOLEAN DEFAULT 0,
success_rate REAL,
FOREIGN KEY (account_id) REFERENCES accounts(id),
FOREIGN KEY (session_id) REFERENCES browser_sessions(id),
FOREIGN KEY (fingerprint_id) REFERENCES browser_fingerprints(id)
);
-- Error Events
CREATE TABLE IF NOT EXISTS error_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
error_id TEXT UNIQUE NOT NULL,
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
error_type TEXT NOT NULL,
error_message TEXT NOT NULL,
stack_trace TEXT,
context TEXT NOT NULL, -- JSON
recovery_attempted BOOLEAN DEFAULT 0,
recovery_successful BOOLEAN DEFAULT 0,
recovery_attempts TEXT, -- JSON array
severity TEXT DEFAULT 'medium',
platform TEXT,
session_id TEXT,
account_id TEXT,
correlation_id TEXT,
user_impact BOOLEAN DEFAULT 1,
system_impact BOOLEAN DEFAULT 0,
data_loss BOOLEAN DEFAULT 0,
FOREIGN KEY (session_id) REFERENCES browser_sessions(id),
FOREIGN KEY (account_id) REFERENCES accounts(id)
);
-- Rate Limit Policies
CREATE TABLE IF NOT EXISTS rate_limit_policies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
action_type TEXT UNIQUE NOT NULL,
min_delay REAL NOT NULL,
max_delay REAL NOT NULL,
adaptive BOOLEAN DEFAULT 1,
backoff_multiplier REAL DEFAULT 1.5,
max_retries INTEGER DEFAULT 3,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Session Pool Status
CREATE TABLE IF NOT EXISTS session_pool_status (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
total_sessions INTEGER NOT NULL,
active_sessions INTEGER NOT NULL,
healthy_sessions INTEGER NOT NULL,
failed_sessions INTEGER NOT NULL,
avg_health_score REAL,
metadata TEXT -- JSON
);
-- Indexes for performance
CREATE INDEX IF NOT EXISTS idx_sessions_last_used ON browser_sessions(last_used);
CREATE INDEX IF NOT EXISTS idx_sessions_health ON browser_sessions(health_score);
CREATE INDEX IF NOT EXISTS idx_sessions_active ON browser_sessions(active);
CREATE INDEX IF NOT EXISTS idx_rate_limits_timestamp ON rate_limit_events(timestamp);
CREATE INDEX IF NOT EXISTS idx_rate_limits_action ON rate_limit_events(action_type);
CREATE INDEX IF NOT EXISTS idx_analytics_timestamp ON account_creation_analytics(timestamp);
CREATE INDEX IF NOT EXISTS idx_analytics_success ON account_creation_analytics(success);
CREATE INDEX IF NOT EXISTS idx_analytics_platform ON account_creation_analytics(metadata);
CREATE INDEX IF NOT EXISTS idx_errors_timestamp ON error_events(timestamp);
CREATE INDEX IF NOT EXISTS idx_errors_type ON error_events(error_type);
CREATE INDEX IF NOT EXISTS idx_errors_severity ON error_events(severity);
-- Views für häufige Abfragen
CREATE VIEW IF NOT EXISTS v_session_health AS
SELECT
bs.id,
bs.health_score,
bs.error_count,
bs.success_count,
bs.last_used,
COUNT(aca.id) as total_accounts,
AVG(aca.success_rate) as avg_success_rate
FROM browser_sessions bs
LEFT JOIN account_creation_analytics aca ON bs.id = aca.session_id
GROUP BY bs.id;
CREATE VIEW IF NOT EXISTS v_daily_analytics AS
SELECT
DATE(timestamp) as date,
COUNT(*) as total_attempts,
SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) as successful,
AVG(duration_seconds) as avg_duration,
AVG(total_retry_count) as avg_retries
FROM account_creation_analytics
GROUP BY DATE(timestamp);
CREATE VIEW IF NOT EXISTS v_error_summary AS
SELECT
error_type,
COUNT(*) as error_count,
MIN(timestamp) as first_occurrence,
MAX(timestamp) as last_occurrence,
AVG(CASE WHEN recovery_successful = 1 THEN 1.0 ELSE 0.0 END) as recovery_rate
FROM error_events
GROUP BY error_type;