This commit is contained in:
2025-11-18 03:43:21 +01:00
parent beb7d9c868
commit 9b1f1f0710
16 changed files with 2369 additions and 576 deletions

111
sql.schema Normal file
View File

@@ -0,0 +1,111 @@
-- ============================================================
-- 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
);