Files
geograsim/App/php/api/sessions.php
T
Adminator f22c5ebbfe 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>
2026-04-13 16:43:42 +02:00

70 lines
1.9 KiB
PHP

<?php
/**
* API: Session-Management
* POST /api/sessions {action: "join", joinCode: "ABC123", displayName: "Anna"}
* POST /api/sessions {action: "status"}
*/
header('Content-Type: application/json; charset=utf-8');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
Response::error('Nur POST erlaubt', 405);
}
$body = json_decode(file_get_contents('php://input'), true);
$action = $body['action'] ?? '';
$db = Database::get();
if ($action === 'join') {
$joinCode = strtoupper(trim($body['joinCode'] ?? ''));
if (strlen($joinCode) !== 6) {
Response::error('Ungültiger Code');
}
$class = $db->fetchOne('SELECT id, name FROM classes WHERE join_code = ?', [$joinCode]);
if (!$class) {
Response::error('Klasse nicht gefunden');
}
$displayName = trim($body['displayName'] ?? '');
$uuid = Session::createStudent((int)$class['id'], $displayName);
Response::ok([
'sessionId' => $uuid,
'className' => $class['name'],
'classId' => (int)$class['id'],
]);
}
if ($action === 'status') {
$sessionId = Session::studentId();
if (!$sessionId) {
Response::json(['loggedIn' => false]);
}
$session = $db->fetchOne(
'SELECT s.display_name, s.class_id, c.name as class_name
FROM student_sessions s
LEFT JOIN classes c ON c.id = s.class_id
WHERE s.id = ?',
[$sessionId]
);
if (!$session) {
Response::json(['loggedIn' => false]);
}
// last_seen aktualisieren
$db->execute('UPDATE student_sessions SET last_seen = NOW() WHERE id = ?', [$sessionId]);
Response::json([
'loggedIn' => true,
'sessionId' => $sessionId,
'displayName' => $session['display_name'],
'classId' => $session['class_id'],
'className' => $session['class_name'],
]);
}
Response::error('Unbekannte Aktion');