All checks were successful
Deploy to production / deploy (push) Successful in 4m46s
- Introduced a new section for 'Ort & Richtung' in the Bisaya didactics, including learning goals, core patterns, grammar focus, speaking prompts, and practical tasks to enhance language learning. - Updated the lesson didactics to include the new section, ensuring comprehensive coverage of location and direction vocabulary.
583 lines
28 KiB
JavaScript
583 lines
28 KiB
JavaScript
#!/usr/bin/env node
|
||
/**
|
||
* Pflegt didaktische Felder in bestehenden Bisaya-Kursen nach.
|
||
*
|
||
* Verwendung:
|
||
* node backend/scripts/update-bisaya-didactics.js
|
||
*/
|
||
|
||
import { sequelize } from '../utils/sequelize.js';
|
||
import VocabCourseLesson from '../models/community/vocab_course_lesson.js';
|
||
import { getBisayaLessonPedagogy } from './bisaya-course-phase2-pedagogy.js';
|
||
import { BISAYA_DIDACTICS_FRAGMENTS } from './bisaya-course-phase1.js';
|
||
import { pathToFileURL } from 'url';
|
||
import {
|
||
BISAYA_DIDACTICS_24_43,
|
||
BISAYA_LESSONS_24_43_BY_NUMBER,
|
||
BISAYA_RELATIONSHIP_ANCHOR_DIDACTICS
|
||
} from './bisaya-course-plan-24-43.js';
|
||
import { BISAYA_PHASE3_DIDACTICS } from './bisaya-course-phase3-extension.js';
|
||
|
||
/** Alte Kurstitel → aktueller Schlüssel in LESSON_DIDACTICS (bestehende Datenbanken). */
|
||
export const LEGACY_DIDACTICS_TITLE_MAP = {
|
||
'Zahlen & Preise': 'Zahlen 1–20',
|
||
'Gefühle & Emotionen': 'Gefühle im Alltag',
|
||
'Höflichkeitsformen': 'Höflichkeitsformen praktisch',
|
||
'Kinder & Spiel': 'Kinder, Spiel & Routine',
|
||
'Woche 3 - Wiederholung': 'Woche 3 - Intensivwiederholung',
|
||
'Woche 3 - Vokabeltest': 'Woche 3 - Checkpoint',
|
||
'Freies Gespräch - Thema 1': 'Alltagsszene: Zuhause morgens',
|
||
'Wiederholung - Woche 1 & 2': 'Spiralreview: Woche 1-2 im Alltag',
|
||
'Freies Gespräch - Thema 2': 'Alltagsszene: Besuch am Nachmittag',
|
||
'Wiederholung - Woche 3': 'Spiralreview: Gefühle & Gesundheit',
|
||
'Komplexere Gespräche': 'Längeres Gespräch: Planung und Familie',
|
||
'Gesamtwiederholung': 'Gesamtwiederholung mit Fehlerclustern',
|
||
'Praktische Übung': 'Praktische Übung: Markt + Familie',
|
||
'Abschlusstest - Vokabeln': 'Abschlusstest Wortschatz aktiv',
|
||
'Abschlussprüfung': 'Abschlussprüfung Grundphase',
|
||
'Kulturelle Tipps & Tricks': 'Kultur: Höflichkeit, Familie, Alltag'
|
||
};
|
||
|
||
export const LESSON_DIDACTICS = {
|
||
'Begrüßungen & Höflichkeit': {
|
||
learningGoals: [
|
||
'Einfache Begrüßungen verstehen und selbst verwenden.',
|
||
'Tageszeitbezogene Grüße und einfache Verabschiedungen unterscheiden.',
|
||
'Höfliche Reaktionen wie Danke und Bitte passend einsetzen.',
|
||
'Ein kurzes Begrüßungs-Mini-Gespräch laut üben.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Kumusta ka?', gloss: 'Wie geht es dir?' },
|
||
{ target: 'Maayong buntag.', gloss: 'Guten Morgen.' },
|
||
{ target: 'Maayong adlaw.', gloss: 'Guten Tag.' },
|
||
{ target: 'Maayong gabii.', gloss: 'Guten Abend.' },
|
||
{ target: 'Maayong gabii, matulog na ta.', gloss: 'Guten Abend, wir legen uns schlafen.' },
|
||
{ target: 'Katulog og maayo.', gloss: 'Schlaf gut.' },
|
||
{ target: 'Kapoy na ka?', gloss: 'Bist du müde?' },
|
||
{ target: 'Matulog na ta.', gloss: 'Lass uns schlafen gehen.' },
|
||
{ target: 'Inom sa og tubig.', gloss: 'Trink Wasser.' },
|
||
{ target: 'Patya ang suga.', gloss: 'Mach das Licht aus.' },
|
||
{ target: 'Tabuni ang imong kaugalingon.', gloss: 'Deck dich zu.' },
|
||
{ target: 'Ugma nasad.', gloss: 'Bis morgen wieder.' },
|
||
{ target: 'Damgo og nindot.', gloss: 'Träum schön.' },
|
||
{ target: 'Amping.', gloss: 'Pass auf dich auf.' },
|
||
{ target: 'Babay.', gloss: 'Tschüss.' },
|
||
{ target: 'Maayo ko.', gloss: 'Mir geht es gut.' },
|
||
{ target: 'Salamat.', gloss: 'Danke.' },
|
||
{ target: 'Palihug.', gloss: 'Bitte.' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'Kurzantworten mit ko', text: 'Mit "ko" sprichst du über dich selbst: "Maayo ko."', example: 'Maayo ko. = Mir geht es gut.' },
|
||
{ title: 'Maayong + Tageszeit', text: 'Mit "Maayong" kannst du Grüße für verschiedene Tageszeiten bilden.', example: 'Maayong buntag. / Maayong gabii.' },
|
||
{ title: 'Abend und Schlafen', text: 'Im Familienalltag folgen auf einen Abendgruß oft direkte Schlafens- oder Fürsorgeformeln.', example: 'Maayong gabii. / Katulog og maayo.' },
|
||
{ title: 'Sanfte Schlafensroutine', text: 'Kurze Fragen nach Müdigkeit und kleine Aufforderungen klingen im Familienalltag natürlicher als lange Sätze.', example: 'Kapoy na ka? Matulog na ta. Inom sa og tubig.' },
|
||
{ title: 'Familiäre Abendformeln', text: 'Am Abend folgen oft sehr kurze Handlungsformeln wie Licht aus, zudecken oder ein Schlafwunsch.', example: 'Patya ang suga. Tabuni ang imong kaugalingon. Damgo og nindot.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Mini-Gespräch', prompt: 'Begrüße eine Person, frage nach dem Befinden und reagiere höflich.', cue: 'Kumusta ka? Maayo ko. Salamat.' },
|
||
{ title: 'Verabschiedung', prompt: 'Verabschiede dich kurz und wünsche, dass die andere Person auf sich aufpasst.', cue: 'Babay. Amping.' },
|
||
{ title: 'Abend und Schlaf', prompt: 'Wünsche einen guten Abend, eine gute Nacht und dass die Person gut schlafen soll.', cue: 'Maayong gabii. Katulog og maayo.' },
|
||
{ title: 'Schlafensroutine', prompt: 'Frage, ob die Person müde ist, und leite dann sanft zum Schlafengehen über.', cue: 'Kapoy na ka? Matulog na ta. Inom sa og tubig.' },
|
||
{ title: 'Vor dem Schlafen', prompt: 'Bitte darum, das Licht auszumachen, sich zuzudecken, und wünsche eine gute Nacht bis morgen.', cue: 'Patya ang suga. Tabuni ang imong kaugalingon. Ugma nasad. Damgo og nindot.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Alltag', text: 'Sprich die Begrüßung dreimal laut und variiere die Antwort.' }
|
||
]
|
||
},
|
||
'Familienwörter': {
|
||
learningGoals: [
|
||
'Die wichtigsten Familienbezeichnungen sicher erkennen.',
|
||
'Familienmitglieder und Großeltern mit respektvollen Wörtern ansprechen.',
|
||
'Kurze Sätze über die eigene Familie bilden.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Si Nanay.', gloss: 'Das ist Mama.' },
|
||
{ target: 'Si Tatay.', gloss: 'Das ist Papa.' },
|
||
{ target: 'Si Kuya nako.', gloss: 'Das ist mein älterer Bruder.' },
|
||
{ target: 'Si Ate nako.', gloss: 'Das ist meine ältere Schwester.' },
|
||
{ target: 'Si Dodong nako.', gloss: 'Das ist mein jüngerer Bruder.' },
|
||
{ target: 'Si Inday nako.', gloss: 'Das ist meine jüngere Schwester.' },
|
||
{ target: 'Si Lola nako.', gloss: 'Das ist meine Großmutter.' },
|
||
{ target: 'Si Lolo nako.', gloss: 'Das ist mein Großvater.' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'Respekt in Familienanreden', text: 'Kuya und Ate richtest du an ältere Geschwister (oder respektvoll an andere). Dodong und Inday nutzt du für jüngere Brüder bzw. Schwestern; „Ading“ ist eine weiche Anrede an jüngere Geschwister.', example: 'Kuya, palihug. / Si Dodong nako.' },
|
||
{ title: 'si als Personenmarker', text: 'Mit "si" markierst du im einfachen Satz eine konkrete Person.', example: 'Si Nanay. Si Tatay.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Meine Familie', prompt: 'Stelle vier Familienmitglieder mit kurzen Sätzen vor.', cue: 'Si Nanay. Si Tatay. Si Kuya nako. Si Dodong nako.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Familienpraxis', text: 'Nenne laut die acht Kern-Familienwörter und bilde danach drei Mini-Sätze über deine Familie.' }
|
||
]
|
||
},
|
||
'Überlebenssätze - Teil 1': {
|
||
learningGoals: [
|
||
'Zentrale Notfall- und Verständnisfragen schnell abrufen.',
|
||
'Höflich um Wiederholung, Hilfe und langsamere Sprache bitten.',
|
||
'Drei Überlebenssätze hintereinander sicher sprechen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Wala ko kasabot.', gloss: 'Ich verstehe nicht.' },
|
||
{ target: 'Palihug ka mubalik?', gloss: 'Kannst du das bitte wiederholen?' },
|
||
{ target: 'Asa ang CR?', gloss: 'Wo ist die Toilette?' },
|
||
{ target: 'Hinay-hinay lang.', gloss: 'Bitte langsam.' },
|
||
{ target: 'Tabangi ko, palihug.', gloss: 'Hilf mir bitte.' },
|
||
{ target: 'Unsay pasabot ani?', gloss: 'Was bedeutet das?' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'Bitte-Formeln mit palihug', text: '"Palihug" macht Bitten höflich und taucht in vielen Überlebenssätzen auf.', example: 'Palihug ka mubalik? / Tabangi ko, palihug.' },
|
||
{ title: 'Kurze Verständnisfragen', text: 'Sehr kurze Fragen helfen dir im Alltag oft mehr als lange Sätze.', example: 'Unsay pasabot ani? Asa ang CR?' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Wenn du etwas nicht verstehst', prompt: 'Sage, dass du etwas nicht verstehst, und bitte um Wiederholung.', cue: 'Wala ko kasabot. Palihug ka mubalik?' },
|
||
{ title: 'Soforthilfe', prompt: 'Bitte um Hilfe und frage dann nach der Toilette oder nach der Bedeutung eines Wortes.', cue: 'Tabangi ko, palihug. Asa ang CR?' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Alltagsanker', text: 'Sprich alle sechs Überlebenssätze laut durch und ordne sie drei Alltagssituationen zu.' }
|
||
]
|
||
},
|
||
'Familien-Gespräche': {
|
||
learningGoals: [
|
||
'Kurze Familiengespräche sicher verstehen.',
|
||
'Nach Familienmitgliedern fragen und einfache Antworten geben.',
|
||
'Ein Mini-Gespräch über Hunger und Zuhause nachsprechen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Kumusta ka, Nanay?', gloss: 'Wie geht es dir, Mama?' },
|
||
{ target: 'Asa si Tatay?', gloss: 'Wo ist Papa?' },
|
||
{ target: 'Naa siya sa balay.', gloss: 'Er ist zu Hause.' },
|
||
{ target: 'Kumusta na ang Kuya?', gloss: 'Wie geht es dem älteren Bruder?' },
|
||
{ target: 'Kumusta na ang Dodong?', gloss: 'Wie geht es dem jüngeren Bruder?' },
|
||
{ target: 'Kumusta na ang Inday?', gloss: 'Wie geht es der jüngeren Schwester?' },
|
||
{ target: 'Gutom na ko, Nanay.', gloss: 'Ich habe Hunger, Mama.' },
|
||
{ target: 'Hapit na ang pagkaon.', gloss: 'Das Essen ist fast fertig.' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'naa für Ort und Vorhandensein', text: '"Naa" hilft dir, über Orte und Vorhandensein zu sprechen.', example: 'Naa siya sa balay.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Familien-Mini-Dialog', prompt: 'Frage nach einem Familienmitglied und reagiere dann mit einer kurzen Antwort.', cue: 'Asa si Tatay? Naa siya sa balay.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Gesprächspraxis', text: 'Spiele einen kurzen Familienaustausch mit Frage, Antwort und Fürsorge nach.' }
|
||
]
|
||
},
|
||
'Alltagsgespräche - Teil 1': BISAYA_DIDACTICS_FRAGMENTS['Alltagsgespräche - Teil 1'],
|
||
'Haus & Familie': BISAYA_DIDACTICS_FRAGMENTS['Haus & Familie'],
|
||
'Alltagsgespräche - Teil 2': BISAYA_DIDACTICS_FRAGMENTS['Alltagsgespräche - Teil 2'],
|
||
'Ort & Richtung': BISAYA_DIDACTICS_FRAGMENTS['Ort & Richtung'],
|
||
'Gefühle & Zuneigung': {
|
||
learningGoals: [
|
||
'Wichtige Gefühle und Zuneigungsformeln sicher unterscheiden.',
|
||
'Freundliche Nähe und Vermissen sprachlich ausdrücken.',
|
||
'Zwischen positiven und negativen Gefühlen wechseln.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Palangga taka.', gloss: 'Ich hab dich lieb.' },
|
||
{ target: 'Ganahan ko nimo.', gloss: 'Ich mag dich.' },
|
||
{ target: 'Gimingaw ko nimo.', gloss: 'Ich vermisse dich.' },
|
||
{ target: 'Nalipay ko.', gloss: 'Ich bin glücklich.' },
|
||
{ target: 'Nasubo ko.', gloss: 'Ich bin traurig.' },
|
||
{ target: 'Nalipay ko nga nakita ka.', gloss: 'Ich freue mich, dich zu sehen.' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'ko für eigene Gefühle', text: 'Viele Gefühlsaussagen bauen direkt auf dem Muster "Gefühl + ko" auf.', example: 'Nalipay ko. Nasubo ko.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Gefühl ausdrücken', prompt: 'Sage, dass du jemanden magst oder vermisst, und ergänze danach ein einfaches Gefühl.', cue: 'Ganahan ko nimo. Nalipay ko.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Herzsprache', text: 'Lies drei Zuneigungsformeln laut und entscheide danach: liebhaben, mögen oder vermissen?' }
|
||
]
|
||
},
|
||
'Überlebenssätze - Teil 2': {
|
||
learningGoals: [
|
||
'Weitere zentrale Alltagsfragen sicher sprechen.',
|
||
'Höflich Entschuldigung, Nachfrage und Hilfesprache verbinden.',
|
||
'Im Alltag Preise, Dinge und Sprache klar ansprechen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' },
|
||
{ target: 'Unsa ni?', gloss: 'Was ist das?' },
|
||
{ target: 'Pasensya.', gloss: 'Entschuldigung.' },
|
||
{ target: 'Dili ko mag-Bisaya.', gloss: 'Ich spreche kein Bisaya.' },
|
||
{ target: 'Palihug isulat ni.', gloss: 'Bitte schreib das auf.' },
|
||
{ target: 'Nawala ko.', gloss: 'Ich habe mich verlaufen.' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'Kurze Markt- und Orientierungssprache', text: 'Kurze Fragewörter plus ein Nomen reichen oft, um im Alltag voranzukommen.', example: 'Tagpila ni? Unsa ni?' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Auf dem Markt', prompt: 'Frage nach Preis und Bedeutung eines Gegenstands und bitte dann darum, etwas aufzuschreiben.', cue: 'Tagpila ni? Unsa ni? Palihug isulat ni.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Unterwegs', text: 'Sprich drei Sätze für Einkauf, Nachfrage und Orientierung laut hintereinander.' }
|
||
]
|
||
},
|
||
'Essen & Fürsorge': {
|
||
learningGoals: [
|
||
'Fürsorgliche Fragen rund ums Essen verstehen.',
|
||
'Einladungen zum Essen passend beantworten.',
|
||
'Kurze Essens-Dialoge laut üben.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Nikaon na ka?', gloss: 'Hast du schon gegessen?' },
|
||
{ target: 'Kaon ta.', gloss: 'Lass uns essen.' },
|
||
{ target: 'Gusto ka mokaon?', gloss: 'Möchtest du essen?' },
|
||
{ target: 'Gutom na ko.', gloss: 'Ich habe Hunger.' },
|
||
{ target: 'Palihug, hatagi ko ug tubig.', gloss: 'Bitte gib mir Wasser.' },
|
||
{ target: 'Salamat sa pagkaon.', gloss: 'Danke für das Essen.' },
|
||
{ target: 'Busog na ko.', gloss: 'Ich bin satt.' },
|
||
{ target: 'Lami kaayo.', gloss: 'Sehr lecker.' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'na als Zustandsmarker', text: '"na" markiert oft etwas, das bereits eingetreten ist oder jetzt gilt.', example: 'Nikaon na ka?' },
|
||
{ title: 'Bitten mit hatagi ko', text: 'Mit "hatagi ko" bittest du konkret darum, dass dir etwas gegeben wird.', example: 'Palihug, hatagi ko ug tubig.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Fürsorge-Dialog', prompt: 'Frage, ob jemand schon gegessen hat, und biete Essen oder Wasser an.', cue: 'Nikaon na ka? Gusto ka mokaon?' },
|
||
{ title: 'Beim Essen reagieren', prompt: 'Sage, dass du Hunger hast, bitte um Wasser und reagiere danach auf das Essen.', cue: 'Gutom na ko. Palihug, hatagi ko ug tubig. Lami kaayo.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Rollenspiel', text: 'Spiele ein kurzes Gespräch zwischen Gastgeber und Gast beim Essen.' }
|
||
]
|
||
},
|
||
'Essen & Trinken': {
|
||
learningGoals: [
|
||
'Wichtige Essens- und Trinkwörter schnell erkennen.',
|
||
'Zwischen Grundnahrungsmitteln, Getränken und Beilagen unterscheiden.',
|
||
'Mit den neuen Wörtern kurze Einkaufs- oder Tischsätze bauen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Kan-on', gloss: 'gekochter Reis' },
|
||
{ target: 'Tubig', gloss: 'Wasser' },
|
||
{ target: 'Isda', gloss: 'Fisch' },
|
||
{ target: 'Manok', gloss: 'Huhn' },
|
||
{ target: 'Gulay', gloss: 'Gemüse' },
|
||
{ target: 'Prutas', gloss: 'Obst' },
|
||
{ target: 'Gatas', gloss: 'Milch' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'Wortschatz statt ganzer Sätze', text: 'In dieser Lektion sammelst du bewusst Grundwörter, damit du später kurze Essenssätze daraus bauen kannst.', example: 'Kan-on. Tubig. Isda.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Auf dem Tisch', prompt: 'Nenne drei Dinge, die auf dem Tisch stehen oder die du essen und trinken möchtest.', cue: 'Kan-on, isda ug tubig.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Küchenrunde', text: 'Zeige nacheinander auf sieben Lebensmittel oder stelle sie dir vor und sprich jedes Wort laut aus.' }
|
||
]
|
||
},
|
||
'Zeitformen - Grundlagen': {
|
||
learningGoals: [
|
||
'Ni- und Mo- als einfache Zeitmarker unterscheiden.',
|
||
'Kurze Sätze in Vergangenheit und Zukunft bilden.',
|
||
'Das Muster laut mit mehreren Verben wiederholen.'
|
||
],
|
||
corePatterns: ['Ni-kaon ko.', 'Mo-kaon ko.', 'Ni-adto ko.', 'Mo-adto ko.'],
|
||
grammarFocus: [
|
||
{ title: 'Zeitpräfixe', text: 'Ni- verweist auf Vergangenes, Mo- auf Zukünftiges oder Bevorstehendes.', example: 'Ni-kaon ko. / Mo-kaon ko.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Vorher und nachher', prompt: 'Sage einen Satz über etwas, das du getan hast, und einen Satz über etwas, das du tun wirst.', cue: 'Ni-kaon ko. Mo-adto ko.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Mustertraining', text: 'Nimm ein Verb und sprich es einmal mit Ni- und einmal mit Mo-.' }
|
||
]
|
||
},
|
||
'Zeit & Datum': {
|
||
learningGoals: [
|
||
'Die drei wichtigsten Zeitwörter (gestern/heute/morgen) sicher erkennen.',
|
||
'Zeitmarker in kurzen Sätzen verwenden (ganiha/karon/ugma).',
|
||
'Einfache Datums-/Zeitfragen verstehen (z.B. „Unsang adlaw karon?“).'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Ganiha', gloss: 'vorhin / früher heute' },
|
||
{ target: 'Gahapon', gloss: 'gestern' },
|
||
{ target: 'Karon', gloss: 'jetzt / heute' },
|
||
{ target: 'Ugma', gloss: 'morgen' },
|
||
{ target: 'Unya', gloss: 'später' },
|
||
{ target: 'Karong adlawa', gloss: 'heute (heute am Tag)' },
|
||
{ target: 'Unsang adlaw karon?', gloss: 'Welcher Wochentag ist heute?' },
|
||
{ target: 'Alas pila na?', gloss: 'Wie spät ist es?' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'Zeitmarker statt Zeiten', text: 'Statt viele Verbzeiten zu beugen, nutzt Cebuano oft Zeitwörter wie „karon/ugma/gahapon“ und ergänzt sie bei Bedarf.', example: 'Mo-adto ko ugma. / Ni-adto ko gahapon.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Gestern–heute–morgen', prompt: 'Sprich drei Mini-Sätze: gestern, heute, morgen (du kannst immer dasselbe Verb nehmen).', cue: 'Ni-adto ko gahapon. Naa ko diri karon. Mo-adto ko ugma.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Alltag einordnen', text: 'Nenne laut drei Dinge, die du heute machst, und ergänze jeweils „karon“ oder „unya“.' }
|
||
]
|
||
},
|
||
'Einkaufen & Preise': {
|
||
learningGoals: [
|
||
'Preise erfragen und auf einfache Antworten reagieren.',
|
||
'Beim Einkauf höflich nachfragen oder um einen besseren Preis bitten.',
|
||
'Einen kurzen Markt-Dialog mit Frage und Antwort führen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' },
|
||
{ target: 'Mahal ba ni?', gloss: 'Ist das teuer?' },
|
||
{ target: 'Pwede barato?', gloss: 'Geht es günstiger?' },
|
||
{ target: 'Sige, paliton nako.', gloss: 'Okay, ich nehme es.' },
|
||
{ target: 'Salamat, suki.', gloss: 'Danke (vertraulich beim Händler).' },
|
||
{ target: 'Unsaon pagbayad?', gloss: 'Wie bezahle ich?' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'Marktfragen kurz halten', text: 'Auf dem Markt funktionieren sehr kurze Fragen oft am besten.', example: 'Tagpila ni? Mahal ba ni?' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Kaufgespräch', prompt: 'Frage nach dem Preis, handle kurz und entscheide dann, ob du kaufst.', cue: 'Tagpila ni? Pwede barato? Sige, paliton nako.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Preisrunde', text: 'Nimm drei Gegenstände in deiner Umgebung und frage zu jedem einmal „Tagpila ni?“ laut.' }
|
||
]
|
||
},
|
||
'Zahlen 1–20': {
|
||
learningGoals: [
|
||
'Die Grundzahlen 1–10 sicher sprechen und zuordnen.',
|
||
'Zahlen bis 20 wiedererkennen und laut bilden.',
|
||
'Den Aufbau von 11–19 gegenüber Zehnern unterscheiden.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Usa', gloss: 'eins' },
|
||
{ target: 'Duha', gloss: 'zwei' },
|
||
{ target: 'Tulo', gloss: 'drei' },
|
||
{ target: 'Upat', gloss: 'vier' },
|
||
{ target: 'Lima', gloss: 'fünf' },
|
||
{ target: 'Unom', gloss: 'sechs' },
|
||
{ target: 'Pito', gloss: 'sieben' },
|
||
{ target: 'Walo', gloss: 'acht' },
|
||
{ target: 'Siyam', gloss: 'neun' },
|
||
{ target: 'Napulo', gloss: 'zehn' },
|
||
{ target: 'Napulo ug usa', gloss: 'elf' },
|
||
{ target: 'Napulo ug duha', gloss: 'zwölf' },
|
||
{ target: 'Napulo ug tulo', gloss: 'dreizehn' },
|
||
{ target: 'Napulo ug upat', gloss: 'vierzehn' },
|
||
{ target: 'Napulo ug lima', gloss: 'fünfzehn' },
|
||
{ target: 'Napulo ug unom', gloss: 'sechzehn' },
|
||
{ target: 'Napulo ug pito', gloss: 'siebzehn' },
|
||
{ target: 'Napulo ug walo', gloss: 'achtzehn' },
|
||
{ target: 'Napulo ug siyam', gloss: 'neunzehn' },
|
||
{ target: 'Baynte', gloss: 'zwanzig' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Zählen', prompt: 'Zähle laut von 1 bis 10 und dann einzeln bis 20.', cue: 'Usa, duha, tulo … baynte.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Zahlenkarten', text: 'Schreibe 1–20 auf Karten und übersetze jede Zahl ins Bisaya.' }
|
||
]
|
||
},
|
||
'Zahlen: Zehner': {
|
||
learningGoals: [
|
||
'Die runden Zehner 20–90 sicher erkennen.',
|
||
'Zehner mit spanisch geprägten Formen im Alltag wiedererkennen.',
|
||
'Einfache Kombinationen mit Zehnern (z. B. Preis grob) verstehen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Baynte', gloss: 'zwanzig' },
|
||
{ target: 'Traysenta', gloss: 'dreißig' },
|
||
{ target: 'Kwarenta', gloss: 'vierzig' },
|
||
{ target: 'Singkwenta', gloss: 'fünfzig' },
|
||
{ target: 'Sesenta', gloss: 'sechzig' },
|
||
{ target: 'Setenta', gloss: 'siebzig' },
|
||
{ target: 'Otsenta', gloss: 'achtzig' },
|
||
{ target: 'Nobenta', gloss: 'neunzig' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'Zehner im Markt', text: 'Preise werden oft mit Zehnerformen genannt.', example: 'Baynte pesos.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Nur Zehner', text: 'Nenne laut nacheinander 20, 30, … 90.' }
|
||
]
|
||
},
|
||
'Zahlen: Hunderter': {
|
||
learningGoals: [
|
||
'Hunderter mit „ka gatos“ bilden.',
|
||
'Zwischen 100 und 900 unterscheiden.',
|
||
'Hunderter in groben Preisangaben erkennen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Usa ka gatos', gloss: 'einhundert' },
|
||
{ target: 'Duha ka gatos', gloss: 'zweihundert' },
|
||
{ target: 'Lima ka gatos', gloss: 'fünfhundert' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Hunderter hören', prompt: 'Sage drei Hunderter-Beträge laut.', cue: 'Usa ka gatos. Duha ka gatos. Tulo ka gatos.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Grober Preis', text: 'Übe Preise in Hunderter-Schritten zu nennen.' }
|
||
]
|
||
},
|
||
'Zahlen: Tausender': {
|
||
learningGoals: [
|
||
'Tausender mit „libo“ bilden.',
|
||
'Große Beträge grob einordnen.',
|
||
'Einfache Tausender in Kontexten wie Miete oder Gehalt erkennen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Usa ka libo', gloss: 'eintausend' },
|
||
{ target: 'Duha ka libo', gloss: 'zweitausend' },
|
||
{ target: 'Tulo ka libo', gloss: 'dreitausend' }
|
||
],
|
||
grammarFocus: [
|
||
{ title: 'libo', text: '„Libo“ markiert Tausender; davor steht die Anzahl.', example: 'Usa ka libo.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Tausender sagen', text: 'Nenne zwei vierstellige Beträge in groben Tausender-Schritten auf Bisaya.' }
|
||
]
|
||
},
|
||
'Woche 2 - Wiederholung': {
|
||
learningGoals: [
|
||
'Die zentralen Muster von Lektion 11–21 sicher wiedererkennen.',
|
||
'Orte, Zeitangaben und Preisfragen in einem Durchgang kombinieren.',
|
||
'Kurze Alltagssituationen ohne Hilfe formulieren.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Naa ko sa balay.', gloss: 'Ich bin zu Hause.' },
|
||
{ target: 'Asa ka moadto unya?', gloss: 'Wohin gehst du später?' },
|
||
{ target: 'Mo-adto ko ugma.', gloss: 'Ich gehe morgen.' },
|
||
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' },
|
||
{ target: 'Baynte pesos.', gloss: 'Zwanzig Peso.' }
|
||
],
|
||
speakingPrompts: [
|
||
{ title: 'Woche-2-Mix', prompt: 'Baue einen Mini-Dialog mit Ort, Zeit und Preis.', cue: 'Asa ka moadto unya? Tagpila ni? Baynte pesos.' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Spiral-Wiederholung', text: 'Sprich nacheinander je einen Satz zu Ort, Zeit und Einkauf.' }
|
||
]
|
||
},
|
||
'Woche 2 - Vokabeltest': {
|
||
learningGoals: [
|
||
'Wortschatz aus Woche 2 schnell abrufen.',
|
||
'Ähnliche Zeit- und Ortswörter sicher unterscheiden.',
|
||
'Zahlen und Preisvokabeln fehlerfrei zuordnen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Balay', gloss: 'Haus' },
|
||
{ target: 'Kusina', gloss: 'Küche' },
|
||
{ target: 'Karon', gloss: 'heute/jetzt' },
|
||
{ target: 'Ugma', gloss: 'morgen' },
|
||
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' },
|
||
{ target: 'Baynte', gloss: 'zwanzig' }
|
||
],
|
||
practicalTasks: [
|
||
{ title: 'Selbsttest', text: 'Nimm zehn Wörter aus Woche 2 und übersetze sie laut in beide Richtungen.' }
|
||
]
|
||
},
|
||
'Woche 1 - Wiederholung': {
|
||
learningGoals: [
|
||
'Die Kernmuster der ersten Woche ohne Hilfe wiederholen.',
|
||
'Zwischen Begrüßung, Familie und Fürsorge schneller wechseln.',
|
||
'Eine kurze Alltagssequenz frei sprechen.'
|
||
],
|
||
corePatterns: ['Kumusta ka?', 'Palangga taka.', 'Nikaon na ka?', 'Wala ko kasabot.'],
|
||
speakingPrompts: [
|
||
{ title: 'Freie Wiederholung', prompt: 'Begrüße jemanden, drücke Zuneigung aus und frage fürsorglich nach dem Essen.', cue: 'Kumusta ka? Palangga taka. Nikaon na ka?' }
|
||
]
|
||
},
|
||
'Woche 1 - Vokabeltest': {
|
||
learningGoals: [
|
||
'Die wichtigsten Wörter der ersten Woche schnell abrufen.',
|
||
'Bedeutung und Gebrauch zentraler Wörter unterscheiden.',
|
||
'Von einzelnen Wörtern zu kurzen Sätzen übergehen.'
|
||
],
|
||
corePatterns: ['Kumusta', 'Salamat', 'Lami', 'Mingaw ko nimo']
|
||
},
|
||
...BISAYA_RELATIONSHIP_ANCHOR_DIDACTICS,
|
||
...BISAYA_DIDACTICS_24_43,
|
||
...BISAYA_PHASE3_DIDACTICS
|
||
};
|
||
|
||
function resolveDidacticsForLesson(lesson) {
|
||
const direct = LESSON_DIDACTICS[lesson.title];
|
||
if (direct) return direct;
|
||
const plannedTitle = BISAYA_LESSONS_24_43_BY_NUMBER[Number(lesson.lessonNumber)]?.title;
|
||
if (plannedTitle && LESSON_DIDACTICS[plannedTitle]) return LESSON_DIDACTICS[plannedTitle];
|
||
const mappedTitle = LEGACY_DIDACTICS_TITLE_MAP[lesson.title];
|
||
if (mappedTitle) return LESSON_DIDACTICS[mappedTitle];
|
||
return null;
|
||
}
|
||
|
||
async function updateBisayaDidactics() {
|
||
await sequelize.authenticate();
|
||
const [bisayaLanguage] = await sequelize.query(
|
||
`SELECT id FROM community.vocab_language WHERE name = 'Bisaya' LIMIT 1`,
|
||
{ type: sequelize.QueryTypes.SELECT }
|
||
);
|
||
|
||
if (!bisayaLanguage) {
|
||
console.error('❌ Bisaya-Sprache nicht gefunden.');
|
||
return;
|
||
}
|
||
|
||
const lessonRows = await sequelize.query(
|
||
`SELECT l.id, l.lesson_number, l.title
|
||
FROM community.vocab_course_lesson l
|
||
JOIN community.vocab_course c ON c.id = l.course_id
|
||
WHERE c.language_id = :languageId
|
||
ORDER BY c.id, l.lesson_number`,
|
||
{
|
||
replacements: { languageId: bisayaLanguage.id },
|
||
type: sequelize.QueryTypes.SELECT
|
||
}
|
||
);
|
||
|
||
let updated = 0;
|
||
for (const row of lessonRows) {
|
||
const lessonLike = {
|
||
title: row.title,
|
||
lessonNumber: row.lesson_number
|
||
};
|
||
const didactics = resolveDidacticsForLesson(lessonLike);
|
||
const pedagogy = getBisayaLessonPedagogy(lessonLike.lessonNumber);
|
||
if (!didactics && !pedagogy) continue;
|
||
|
||
const patch = {};
|
||
if (didactics) {
|
||
patch.learningGoals = didactics.learningGoals || [];
|
||
patch.corePatterns = didactics.corePatterns || [];
|
||
patch.grammarFocus = didactics.grammarFocus || [];
|
||
patch.speakingPrompts = didactics.speakingPrompts || [];
|
||
patch.practicalTasks = didactics.practicalTasks || [];
|
||
}
|
||
if (pedagogy) {
|
||
patch.didacticMode = pedagogy.didacticMode || null;
|
||
patch.phaseLabel = pedagogy.phaseLabel || null;
|
||
patch.blockNumber = pedagogy.blockNumber ?? null;
|
||
patch.difficultyWeight = pedagogy.difficultyWeight ?? null;
|
||
patch.newUnitTarget = pedagogy.newUnitTarget ?? null;
|
||
patch.reviewWeight = pedagogy.reviewWeight ?? null;
|
||
patch.isIntensiveReview = Boolean(pedagogy.isIntensiveReview);
|
||
}
|
||
|
||
await VocabCourseLesson.update(patch, { where: { id: row.id } });
|
||
updated++;
|
||
console.log(`✅ Didaktik aktualisiert: Lektion ${lessonLike.lessonNumber} - ${lessonLike.title}`);
|
||
}
|
||
|
||
console.log(`\n🎉 Fertig. ${updated} Lektion(en) aktualisiert.`);
|
||
}
|
||
|
||
async function main() {
|
||
try {
|
||
await updateBisayaDidactics();
|
||
} catch (error) {
|
||
console.error('❌ Fehler:', error);
|
||
process.exitCode = 1;
|
||
} finally {
|
||
await sequelize.close();
|
||
}
|
||
process.exit(process.exitCode ?? 0);
|
||
}
|
||
|
||
const isDirectRun = process.argv[1]
|
||
? import.meta.url === pathToFileURL(process.argv[1]).href
|
||
: false;
|
||
|
||
if (isDirectRun) {
|
||
main();
|
||
}
|