-- KI-Backend (TODO 4.5.9) — MySQL/MariaDB-Schema. -- Multi-user-fähig von Anfang an, auch wenn zunächst nur ein Nutzer angelegt wird. CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(64) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, -- password_hash()-Ausgabe (bcrypt/argon2) balance_usd DECIMAL(10,4) NOT NULL DEFAULT 0.0000, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, is_active TINYINT(1) NOT NULL DEFAULT 1 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS tokens ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, token_hash VARCHAR(64) NOT NULL, -- SHA-256 des Tokens; der Klartext wird nie gespeichert expires_at DATETIME NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, INDEX idx_token_hash (token_hash) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS transactions ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, type ENUM('usage', 'topup') NOT NULL, model VARCHAR(64) NULL, -- z.B. 'claude-sonnet-5'; NULL bei topup input_tokens INT NULL, output_tokens INT NULL, -- Prompt Caching (Nachtrag): der stark reduziert abgerechnete "Cache-Read"-Anteil bzw. der -- etwas teurere "Cache-Write"-Anteil beim ersten Aufruf nach TTL-Ablauf. Für Requests ohne -- Caching (z.B. FakeProvider) immer 0, nicht NULL — vereinfacht Summenbildung in Auswertungen. cache_creation_input_tokens INT NOT NULL DEFAULT 0, cache_read_input_tokens INT NOT NULL DEFAULT 0, cost_usd DECIMAL(10,6) NOT NULL, balance_after DECIMAL(10,4) NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, INDEX idx_user_created (user_id, created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;