Add diagnose_tree.php to check tree enrichment and database state

This commit is contained in:
Hamza-Ayed
2026-09-11 00:15:53 +03:00
parent 039c977d63
commit a6acdce532
+98
View File
@@ -0,0 +1,98 @@
<?php
declare(strict_types=1);
require_once dirname(__DIR__) . '/app/bootstrap.php';
use App\Core\Database;
use App\Services\CurriculumService;
echo "=== DIAGNOSING CURRICULUM TREE ENRICHMENT ===\n\n";
// 1. Database check
try {
$approvedCount = Database::selectOne("SELECT COUNT(*) as cnt FROM curriculum_lessons WHERE source_status = 'approved'");
echo "1. Database Status:\n";
echo " Approved curriculum lessons in DB: " . ($approvedCount['cnt'] ?? 0) . "\n";
$samples = Database::select("SELECT id, uuid, source_manifest_path, source_status FROM curriculum_lessons WHERE source_status = 'approved' LIMIT 3");
foreach ($samples as $s) {
echo " - [{$s['source_status']}] uuid: {$s['uuid']} | path: {$s['source_manifest_path']}\n";
}
} catch (Throwable $e) {
echo " ERROR querying curriculum_lessons: " . $e->getMessage() . "\n";
}
// 2. Storage manifest.json check
echo "\n2. Live manifest.json check:\n";
$tree = CurriculumService::getCurriculumTree();
if (empty($tree)) {
echo " ERROR: CurriculumService::getCurriculumTree() returned empty array!\n";
echo " Check: backend/storage/curriculum/manifest.json\n";
} else {
$firstLesson = $tree['grade_10']['subjects']['math_10']['semesters']['semester_1']['units']['unit_01']['lessons'][1] ?? null;
echo " Grade 10 math lesson 1 in manifest.json:\n";
if ($firstLesson) {
echo " - id: " . ($firstLesson['id'] ?? '') . "\n";
echo " - file: " . ($firstLesson['file'] ?? '') . "\n";
} else {
echo " - Not found at expected key!\n";
}
}
// 3. Test Enrichment Logic directly
echo "\n3. Testing Tree Enrichment Logic:\n";
try {
$approvedLessons = Database::select("SELECT id, uuid, source_manifest_path FROM curriculum_lessons WHERE source_status='approved'");
$byPath = [];
foreach ($approvedLessons as $row) {
$p = (string)$row['source_manifest_path'];
$byPath[$p] = [
'curriculum_lesson_id' => (string)$row['uuid'],
'has_video' => false,
];
}
echo " Mapped " . count($byPath) . " paths in \$byPath lookup table.\n";
$matchCount = 0;
foreach ($tree as &$grade) {
foreach (($grade['subjects'] ?? []) as &$subject) {
foreach (($subject['semesters'] ?? []) as &$semester) {
foreach (($semester['units'] ?? []) as &$unit) {
foreach (($unit['lessons'] ?? []) as &$lesson) {
$path = (string)($lesson['file'] ?? '');
if (isset($byPath[$path])) {
$lesson = array_merge($lesson, $byPath[$path]);
$matchCount++;
}
}
}
}
}
}
unset($grade, $subject, $semester, $unit, $lesson);
echo " Enriched matches in manifest.json tree: {$matchCount}\n";
// Check if first lesson got enriched
$sampleEnriched = $tree['grade_10']['subjects']['math_10']['semesters']['semester_1']['units']['unit_01']['lessons'][1] ?? null;
if (!empty($sampleEnriched['curriculum_lesson_id'])) {
echo "\n=== SUCCESS! Enrichment logic works perfectly in CLI! ===\n";
echo "Sample enriched lesson:\n";
print_r($sampleEnriched);
echo "\nNOTE: If curl returns empty while CLI works, PHP-FPM has cached the old bytecode in OPcache.\n";
echo "Run: systemctl reload php8.3-fpm (or your server php-fpm service) to reload PHP-FPM.\n";
} else {
echo "\n=== WARNING: Sample lesson did not get enriched. Checking sample path... ===\n";
$samplePath = $sampleEnriched['file'] ?? 'none';
echo "Sample path is: '{$samplePath}'\n";
echo "Is set in \$byPath? " . (isset($byPath[$samplePath]) ? "YES" : "NO") . "\n";
if (!isset($byPath[$samplePath])) {
echo "Top 5 paths in \$byPath:\n";
print_r(array_slice(array_keys($byPath), 0, 5));
}
}
} catch (Throwable $e) {
echo " EXCEPTION during enrichment: " . $e->getMessage() . "\n";
echo $e->getTraceAsString() . "\n";
}