1e51ef7def
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
42 lines
1.2 KiB
PHP
42 lines
1.2 KiB
PHP
<?php
|
|
/**
|
|
* GET /api/modules/all — Liste aller installierten V2-Module (für Auftrags-Dropdown).
|
|
*/
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/../../bootstrap.php';
|
|
|
|
v2_validate_method('GET');
|
|
v2_auth_require('any');
|
|
|
|
$rows = v2_db_all("
|
|
SELECT slug, display_name, display_name_easy, icon, status, estimated_duration_min
|
|
FROM module_info_v2
|
|
WHERE status IN ('beta', 'stable')
|
|
ORDER BY display_name
|
|
");
|
|
|
|
// Difficulty-Levels pro Modul
|
|
$levels = v2_db_all("
|
|
SELECT module_slug, level_id, label, label_easy, display_order
|
|
FROM module_levels_v2
|
|
ORDER BY display_order
|
|
");
|
|
$levelsBySlug = [];
|
|
foreach ($levels as $l) {
|
|
$levelsBySlug[$l['module_slug']][] = [
|
|
'id' => $l['level_id'],
|
|
'label' => $l['label'],
|
|
'labelEasy' => $l['label_easy'],
|
|
];
|
|
}
|
|
|
|
v2_response_ok(['modules' => array_map(fn($r) => [
|
|
'slug' => $r['slug'],
|
|
'displayName' => $r['display_name'],
|
|
'displayNameEasy' => $r['display_name_easy'],
|
|
'icon' => $r['icon'] ?? '📘',
|
|
'status' => $r['status'],
|
|
'estimatedDurationMin' => (int) $r['estimated_duration_min'],
|
|
'difficultyLevels' => $levelsBySlug[$r['slug']] ?? [['id' => 'L1', 'label' => 'Einsteiger', 'labelEasy' => 'Leicht']],
|
|
], $rows)]);
|