Enhance logging and conditional rendering in VocabService and VocabLessonView

- Added detailed logging in VocabService for lesson retrieval, including lesson ID, title, and exercise count.
- Improved conditional rendering in VocabLessonView to handle cases where grammar exercises may not be present, enhancing user experience.
- Updated logging in VocabLessonView to provide insights into loaded lessons and exercises, aiding in debugging and monitoring.
This commit is contained in:
Torsten Schulz (local)
2026-01-19 19:12:54 +01:00
parent 0331ffeb93
commit 8f55f63f77
5 changed files with 168 additions and 8 deletions

78
debug-lesson-exercises.js Executable file
View File

@@ -0,0 +1,78 @@
#!/usr/bin/env node
/**
* Debug-Script zum Prüfen, ob Übungen für eine Lektion vorhanden sind
* Verwendung: node debug-lesson-exercises.js [lessonId]
*/
import { sequelize } from './backend/utils/sequelize.js';
import VocabCourseLesson from './backend/models/community/vocab_course_lesson.js';
import VocabGrammarExercise from './backend/models/community/vocab_grammar_exercise.js';
const lessonId = process.argv[2] ? parseInt(process.argv[2]) : 1;
async function debugLesson() {
try {
await sequelize.authenticate();
console.log('✅ Datenbankverbindung erfolgreich\n');
// Lade Lektion mit Übungen (wie im Backend)
const lesson = await VocabCourseLesson.findByPk(lessonId, {
include: [
{
model: require('./backend/models/community/vocab_course.js').default,
as: 'course'
},
{
model: VocabGrammarExercise,
as: 'grammarExercises',
include: [
{
model: require('./backend/models/community/vocab_grammar_exercise_type.js').default,
as: 'exerciseType'
}
],
required: false,
separate: true,
order: [['exerciseNumber', 'ASC']]
}
]
});
if (!lesson) {
console.log(`❌ Lektion ${lessonId} nicht gefunden`);
return;
}
console.log(`📚 Lektion: ${lesson.title} (ID: ${lesson.id})`);
console.log(` Kurs: ${lesson.course?.title || 'N/A'}`);
console.log(` Übungen (via Include): ${lesson.grammarExercises ? lesson.grammarExercises.length : 0}\n`);
// Prüfe direkt in der Datenbank
const directExercises = await VocabGrammarExercise.findAll({
where: { lessonId: lesson.id },
order: [['exerciseNumber', 'ASC']]
});
console.log(`📊 Direkte Abfrage: ${directExercises.length} Übung(en) gefunden`);
directExercises.forEach((ex, idx) => {
console.log(` ${idx + 1}. ${ex.title} (ID: ${ex.id}, Typ: ${ex.exerciseTypeId})`);
});
// Plain object
const plain = lesson.get({ plain: true });
console.log(`\n📦 Plain Object:`);
console.log(` grammarExercises: ${plain.grammarExercises ? plain.grammarExercises.length : 'undefined'}`);
if (plain.grammarExercises && plain.grammarExercises.length > 0) {
plain.grammarExercises.forEach((ex, idx) => {
console.log(` ${idx + 1}. ${ex.title} (ID: ${ex.id})`);
});
}
} catch (error) {
console.error('❌ Fehler:', error);
} finally {
await sequelize.close();
}
}
debugLesson();