112 lines
3.5 KiB
Plaintext
112 lines
3.5 KiB
Plaintext
-- ============================================================
|
||
-- 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
|
||
);
|