-- ============================================================ -- USERS – Benutzerkonto + spätere Rechnungs-/Zahlungsinfos -- ============================================================ CREATE TABLE IF NOT EXISTS users ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, -- Login username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(150) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, avatar_path VARCHAR(255) NULL, -- Persönliche Daten first_name VARCHAR(100) NULL, last_name VARCHAR(100) NULL, -- spätere Rechnungsdaten / Billing company_name VARCHAR(255) NULL, street VARCHAR(255) NULL, postal_code VARCHAR(20) NULL, city VARCHAR(255) NULL, country VARCHAR(100) NULL, vat_id VARCHAR(50) NULL, -- spätere Pro-Features / Limits plan ENUM('free', 'pro', 'enterprise') DEFAULT 'free', plan_valid_until DATETIME NULL, -- Sicherheit created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, last_login_at DATETIME NULL, failed_logins INT DEFAULT 0, is_locked TINYINT(1) DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ============================================================ -- USB DEVICES – vom Nutzer gespeicherte USB-Sticks -- Ein Benutzer kann mehrere Sticks speichern. -- ============================================================ CREATE TABLE IF NOT EXISTS usb_devices ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, user_id BIGINT UNSIGNED NOT NULL, serial_number VARCHAR(255) NULL, manufacturer VARCHAR(255) NULL, model_name VARCHAR(255) NULL, usb_type ENUM('USB 2.0', 'USB 3.0', 'USB 3.1', 'USB 3.2', 'USB 4.0') NULL, capacity_bytes BIGINT UNSIGNED NULL, advertised_capacity_bytes BIGINT UNSIGNED NULL, read_speed_mbps FLOAT NULL, write_speed_mbps FLOAT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); -- ============================================================ -- USB TEST RESULTS – Schnelltest + Pro-Test -- Jedes Testergebnis gehört zu einem Stick. -- ============================================================ CREATE TABLE IF NOT EXISTS usb_tests ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usb_device_id BIGINT UNSIGNED NOT NULL, user_id BIGINT UNSIGNED NOT NULL, -- Testtyp test_type ENUM('quick', 'standard', 'deep', 'pro') NOT NULL, -- Ergebniswerte test_start DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, test_end DATETIME NULL, read_speed_mbps FLOAT NULL, write_speed_mbps FLOAT NULL, integrity_ok TINYINT(1) NULL, checksum_sha256 VARCHAR(255) NULL, -- Pro-Modus Zusatzwerte (f3, badblocks etc.) f3_status ENUM('unknown', 'pass', 'fail', 'warning') DEFAULT 'unknown', f3_real_capacity_bytes BIGINT UNSIGNED NULL, f3_lost_bytes BIGINT UNSIGNED NULL, badblocks_errors INT NULL, -- Metadaten test_report_json JSON NULL, ip_address VARCHAR(45) NULL, -- ipv6 kompatibel created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (usb_device_id) REFERENCES usb_devices(id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );