#!/usr/bin/env node /** * Findet Multiple-Choice-Übungen, bei denen die Frage ein einzelnes Wort ist * aber die richtige Antwort ein kompletter Satz (mehrere Wörter) ist. * * Default: Dry-run und listet die gefundenen Übungen auf. * Use --apply to actually delete them from the DB. */ import { sequelize } from '../utils/sequelize.js'; import VocabGrammarExercise from '../models/community/vocab_grammar_exercise.js'; const args = process.argv.slice(2); const apply = args.includes('--apply'); async function run() { try { await sequelize.authenticate(); console.log('✅ DB verbunden'); const list = await VocabGrammarExercise.findAll({ where: { exerciseTypeId: 2 }, order: [['lesson_id', 'ASC'], ['exercise_number', 'ASC']] }); const candidates = []; for (const ex of list) { const q = ex.questionData || {}; const a = ex.answerData || {}; const questionText = String(q.question || q.text || '').trim(); const correct = String(a.correctAnswer || a.correct || a.correctAnswerText || '').trim(); if (!questionText || !correct) continue; const questionWords = questionText.split(/\s+/).filter(Boolean).length; const correctWords = correct.split(/\s+/).filter(Boolean).length; // Heuristik: Frage ist Einzelwort, Antwort ist Satz (>1 Wort) if (questionWords === 1 && correctWords > 1) { candidates.push({ id: ex.id, lessonId: ex.lessonId, exerciseNumber: ex.exerciseNumber, title: ex.title, questionText, correct }); } } if (!candidates.length) { console.log('Keine problematischen MC-Übungen gefunden.'); return; } console.log(`Gefundene problematische Übungen: ${candidates.length}`); candidates.forEach((c, i) => { console.log(`${i + 1}. ID:${c.id} lesson:${c.lessonId} #${c.exerciseNumber} title:"${c.title}" question:"${c.questionText}" -> correct:"${c.correct}"`); }); if (!apply) { console.log('\nDry-run beendet. Verwende --apply, um die gefundenen Übungen zu löschen.'); return; } console.log('\n--apply gesetzt: Lösche die gefundenen Übungen...'); for (const c of candidates) { const ex = await VocabGrammarExercise.findByPk(c.id); if (ex) { await ex.destroy(); console.log(`Gelöscht: ID ${c.id}`); } } console.log('Fertig.'); } catch (err) { console.error('Fehler:', err); } finally { await sequelize.close(); } } run();