70 lines
2.8 KiB
JavaScript
70 lines
2.8 KiB
JavaScript
#!/usr/bin/env node
|
||
/** Fügt Bisaya-Kursen den optionalen Reisepfad „Cebu – Reise & Alltag“ hinzu. */
|
||
|
||
import { sequelize } from '../utils/sequelize.js';
|
||
import VocabCourse from '../models/community/vocab_course.js';
|
||
import VocabCourseLesson from '../models/community/vocab_course_lesson.js';
|
||
import { BISAYA_CEBU_TRAVEL_DIDACTICS, BISAYA_CEBU_TRAVEL_LESSONS } from './bisaya-course-cebu-travel-extension.js';
|
||
|
||
async function extendBisayaCourseForCebuTravel() {
|
||
await sequelize.authenticate();
|
||
const [language] = await sequelize.query(
|
||
`SELECT id FROM community.vocab_language WHERE name = 'Bisaya' LIMIT 1`,
|
||
{ type: sequelize.QueryTypes.SELECT }
|
||
);
|
||
if (!language) throw new Error('Bisaya-Sprache nicht gefunden.');
|
||
|
||
const courses = await VocabCourse.findAll({ where: { languageId: language.id } });
|
||
let addedLessons = 0;
|
||
for (const course of courses) {
|
||
await course.update({
|
||
title: 'Bisaya für Cebu – Reise, Familie & Alltag',
|
||
description: 'Praxisnahes Cebuano für Reisen und längere Aufenthalte auf Cebu: Unterkunft, Essen, Markt, Ausflüge, Familie, Höflichkeit und Hilfe unterwegs.'
|
||
});
|
||
for (const lessonData of BISAYA_CEBU_TRAVEL_LESSONS) {
|
||
const existing = await VocabCourseLesson.findOne({
|
||
where: { courseId: course.id, lessonNumber: lessonData.num }
|
||
});
|
||
if (existing) continue;
|
||
const didactics = BISAYA_CEBU_TRAVEL_DIDACTICS[lessonData.title];
|
||
await VocabCourseLesson.create({
|
||
courseId: course.id,
|
||
chapterId: null,
|
||
lessonNumber: lessonData.num,
|
||
title: lessonData.title,
|
||
description: lessonData.desc,
|
||
weekNumber: lessonData.week,
|
||
dayNumber: lessonData.day,
|
||
lessonType: lessonData.type,
|
||
culturalNotes: lessonData.cultural,
|
||
learningGoals: didactics.learningGoals,
|
||
corePatterns: didactics.corePatterns,
|
||
grammarFocus: didactics.grammarFocus || [],
|
||
speakingPrompts: didactics.speakingPrompts || [],
|
||
practicalTasks: didactics.practicalTasks || [],
|
||
targetMinutes: lessonData.targetMin,
|
||
targetScorePercent: lessonData.targetScore,
|
||
requiresReview: lessonData.review,
|
||
didacticMode: 'travel_practice',
|
||
phaseLabel: 'Cebu – Reise & Alltag',
|
||
blockNumber: 8,
|
||
difficultyWeight: 1,
|
||
newUnitTarget: 8,
|
||
reviewWeight: lessonData.review ? 2 : 1,
|
||
isIntensiveReview: false
|
||
});
|
||
addedLessons += 1;
|
||
console.log(`✅ Kurs ${course.id}: Lektion ${lessonData.num} – ${lessonData.title} ergänzt`);
|
||
}
|
||
}
|
||
console.log(`Cebu-Reisepfad: ${addedLessons} Lektionen ergänzt.`);
|
||
}
|
||
|
||
extendBisayaCourseForCebuTravel()
|
||
.then(() => sequelize.close())
|
||
.catch((error) => {
|
||
console.error('❌ Fehler:', error);
|
||
sequelize.close();
|
||
process.exitCode = 1;
|
||
});
|