Stand 2026-04-13: PHP/MySQL Infrastruktur, Flussmanagement, Stadt-Prototyp
- PHP/MySQL Backend (XAMPP + Produktionsserver) - Front-Controller, API-Endpunkte, Session-Management - Flussmanagement-Simulation (Echtzeit, Punkt-basierter Fluss) - Stadt & Raumplanung (Prototyp, Top-Down Kachelsystem) - Klimawaechter 3D: Deiche kleiner, Baeume kippen, Budget angepasst - persistence.ts: Dualer Speicher (localStorage + Server-API) - 6 Unit-Test-Dateien fuer bestehende Simulationen Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
-- GeoGraSim — MySQL Schema
|
||||
-- Ausfuehren: mysql -u root geograsim < schema.sql
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS geograsim CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE geograsim;
|
||||
|
||||
-- Lehrkraefte
|
||||
CREATE TABLE IF NOT EXISTS teachers (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL UNIQUE,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
display_name VARCHAR(128),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- Klassen
|
||||
CREATE TABLE IF NOT EXISTS classes (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
teacher_id INT UNSIGNED NOT NULL,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
school_year VARCHAR(10),
|
||||
join_code CHAR(6) NOT NULL UNIQUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (teacher_id) REFERENCES teachers(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- Schueler-Sessions (anonym, UUID-Cookie)
|
||||
CREATE TABLE IF NOT EXISTS student_sessions (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
class_id INT UNSIGNED,
|
||||
display_name VARCHAR(64),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- Spielstaende (ersetzt localStorage)
|
||||
CREATE TABLE IF NOT EXISTS game_saves (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
session_id CHAR(36) NOT NULL,
|
||||
save_key VARCHAR(64) NOT NULL,
|
||||
save_data MEDIUMTEXT NOT NULL,
|
||||
save_version TINYINT UNSIGNED DEFAULT 2,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_session_key (session_id, save_key),
|
||||
FOREIGN KEY (session_id) REFERENCES student_sessions(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- Assessment-Daten (eine Zeile pro Simulationsabschluss)
|
||||
CREATE TABLE IF NOT EXISTS assessments (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
session_id CHAR(36) NOT NULL,
|
||||
sim_id VARCHAR(16) NOT NULL,
|
||||
class_id INT UNSIGNED,
|
||||
process_log JSON,
|
||||
predictions JSON,
|
||||
results JSON,
|
||||
reflections JSON,
|
||||
duration_ms INT UNSIGNED,
|
||||
completed_phases JSON,
|
||||
submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_class_sim (class_id, sim_id),
|
||||
INDEX idx_session (session_id),
|
||||
FOREIGN KEY (session_id) REFERENCES student_sessions(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- Modulfreigabe pro Klasse
|
||||
CREATE TABLE IF NOT EXISTS class_modules (
|
||||
class_id INT UNSIGNED NOT NULL,
|
||||
module_id VARCHAR(16) NOT NULL,
|
||||
enabled BOOLEAN DEFAULT TRUE,
|
||||
PRIMARY KEY (class_id, module_id),
|
||||
FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- Demo-Lehrer anlegen (Passwort: "demo2026")
|
||||
INSERT IGNORE INTO teachers (id, username, password, display_name)
|
||||
VALUES (1, 'demo', '$2y$10$YQ8kXE5Bq3Dq1Z5VxGf1/.J9Cxj5xEqL8RyE3.zDZ1YCbYdLiK2Vy', 'Demo-Lehrkraft');
|
||||
|
||||
-- Demo-Klasse
|
||||
INSERT IGNORE INTO classes (id, teacher_id, name, school_year, join_code)
|
||||
VALUES (1, 1, '1A', '2025/26', 'GEO1A');
|
||||
Reference in New Issue
Block a user