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:
78
debug-lesson-exercises.js
Executable file
78
debug-lesson-exercises.js
Executable 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();
|
||||
Reference in New Issue
Block a user