Files
yourpart3/backend/scripts/update-food-care-exercises.js
Torsten Schulz (local) a21a2314d7 Enhance survival sentences exercises and VocabCourseView for improved user experience
- Added multiple choice exercises for common phrases in Bisaya, including questions and explanations to aid learning.
- Introduced a gap fill exercise for completing survival sentences, enhancing interactive learning.
- Updated VocabCourseView to display a button for continuing the current lesson, ensuring smoother navigation.
- Implemented logic to prevent starting lessons without completing previous ones, improving course progression management.
2026-01-21 12:01:31 +01:00

723 lines
33 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Script zum Erstellen von Übungen für die "Essen & Fürsorge" und "Essen & Trinken" Lektionen
*
* Verwendung:
* node backend/scripts/update-food-care-exercises.js
*
* Erstellt Gesprächsübungen für die "Essen & Fürsorge" und "Essen & Trinken" Lektionen in allen Bisaya-Kursen.
*/
import { sequelize } from '../utils/sequelize.js';
import VocabCourseLesson from '../models/community/vocab_course_lesson.js';
import VocabGrammarExercise from '../models/community/vocab_grammar_exercise.js';
import VocabCourse from '../models/community/vocab_course.js';
import User from '../models/community/user.js';
import crypto from 'crypto';
import bcrypt from 'bcryptjs';
import { Op } from 'sequelize';
// Essen & Fürsorge / Essen & Trinken auf Bisaya mit verschiedenen Muttersprachen
const FOOD_CARE_CONVERSATIONS = {
// Deutsch -> Bisaya
'Deutsch': {
'Essen & Fürsorge': [
{
bisaya: 'Gutom na ko.',
native: 'Ich habe Hunger.',
explanation: '"Gutom" bedeutet "Hunger", "na" ist "schon", "ko" ist "ich"'
},
{
bisaya: 'Gihikap ko.',
native: 'Ich habe Durst.',
explanation: '"Gihikap" bedeutet "Durst haben", "ko" ist "ich"'
},
{
bisaya: 'Gusto ka mokaon?',
native: 'Möchtest du essen?',
explanation: '"Gusto" bedeutet "möchten", "ka" ist "du", "mokaon" ist "essen"'
},
{
bisaya: 'Oo, gusto ko.',
native: 'Ja, ich möchte.',
explanation: '"Oo" ist "Ja", "gusto ko" ist "ich möchte"'
},
{
bisaya: 'Unsa ang gusto nimo?',
native: 'Was möchtest du?',
explanation: '"Unsa" ist "Was", "ang" ist Artikel, "gusto nimo" ist "du möchtest"'
},
{
bisaya: 'Gusto ko ug kan-on.',
native: 'Ich möchte Reis.',
explanation: '"Gusto ko" ist "ich möchte", "ug" ist "und/ein", "kan-on" ist "Reis"'
},
{
bisaya: 'Palihug, hatagi ko ug tubig.',
native: 'Bitte gib mir Wasser.',
explanation: '"Palihug" ist "Bitte", "hatagi" ist "geben", "ko" ist "mir", "ug tubig" ist "Wasser"'
},
{
bisaya: 'Salamat sa pagkaon.',
native: 'Danke für das Essen.',
explanation: '"Salamat" ist "Danke", "sa pagkaon" ist "für das Essen"'
},
{
bisaya: 'Lami kaayo!',
native: 'Sehr lecker!',
explanation: '"Lami" bedeutet "lecker", "kaayo" ist "sehr"'
},
{
bisaya: 'Busog na ko.',
native: 'Ich bin satt.',
explanation: '"Busog" bedeutet "satt", "na" ist "schon", "ko" ist "ich"'
},
{
bisaya: 'Kumusta ang pagkaon?',
native: 'Wie schmeckt das Essen?',
explanation: '"Kumusta" ist "Wie", "ang pagkaon" ist "das Essen"'
},
{
bisaya: 'Maayo kaayo ang pagkaon.',
native: 'Das Essen ist sehr gut.',
explanation: '"Maayo" ist "gut", "kaayo" ist "sehr", "ang pagkaon" ist "das Essen"'
}
],
'Essen & Trinken': [
{
bisaya: 'Kan-on',
native: 'Reis',
explanation: '"Kan-on" ist das grundlegende Wort für "Reis"'
},
{
bisaya: 'Tubig',
native: 'Wasser',
explanation: '"Tubig" bedeutet "Wasser"'
},
{
bisaya: 'Pan',
native: 'Brot',
explanation: '"Pan" bedeutet "Brot"'
},
{
bisaya: 'Isda',
native: 'Fisch',
explanation: '"Isda" bedeutet "Fisch"'
},
{
bisaya: 'Manok',
native: 'Huhn',
explanation: '"Manok" bedeutet "Huhn"'
},
{
bisaya: 'Baboy',
native: 'Schwein',
explanation: '"Baboy" bedeutet "Schwein"'
},
{
bisaya: 'Gulay',
native: 'Gemüse',
explanation: '"Gulay" bedeutet "Gemüse"'
},
{
bisaya: 'Prutas',
native: 'Obst',
explanation: '"Prutas" bedeutet "Obst"'
},
{
bisaya: 'Gatas',
native: 'Milch',
explanation: '"Gatas" bedeutet "Milch"'
},
{
bisaya: 'Kape',
native: 'Kaffee',
explanation: '"Kape" bedeutet "Kaffee"'
},
{
bisaya: 'Tsa',
native: 'Tee',
explanation: '"Tsa" bedeutet "Tee"'
},
{
bisaya: 'Asin',
native: 'Salz',
explanation: '"Asin" bedeutet "Salz"'
},
{
bisaya: 'Asukar',
native: 'Zucker',
explanation: '"Asukar" bedeutet "Zucker"'
},
{
bisaya: 'Tinapay',
native: 'Brot (alternativ)',
explanation: '"Tinapay" ist eine alternative Bezeichnung für "Brot"'
},
{
bisaya: 'Bugas',
native: 'Reis (roh)',
explanation: '"Bugas" ist ungekochter Reis, "kan-on" ist gekochter Reis'
}
]
},
// Englisch -> Bisaya
'Englisch': {
'Essen & Fürsorge': [
{
bisaya: 'Gutom na ko.',
native: 'I am hungry.',
explanation: '"Gutom" means "hungry", "na" is "already", "ko" is "I"'
},
{
bisaya: 'Gihikap ko.',
native: 'I am thirsty.',
explanation: '"Gihikap" means "thirsty", "ko" is "I"'
},
{
bisaya: 'Gusto ka mokaon?',
native: 'Do you want to eat?',
explanation: '"Gusto" means "want", "ka" is "you", "mokaon" is "to eat"'
},
{
bisaya: 'Oo, gusto ko.',
native: 'Yes, I want.',
explanation: '"Oo" is "Yes", "gusto ko" is "I want"'
},
{
bisaya: 'Unsa ang gusto nimo?',
native: 'What do you want?',
explanation: '"Unsa" is "What", "ang" is article, "gusto nimo" is "you want"'
},
{
bisaya: 'Gusto ko ug kan-on.',
native: 'I want rice.',
explanation: '"Gusto ko" is "I want", "ug" is "a/some", "kan-on" is "rice"'
},
{
bisaya: 'Palihug, hatagi ko ug tubig.',
native: 'Please give me water.',
explanation: '"Palihug" is "Please", "hatagi" is "give", "ko" is "me", "ug tubig" is "water"'
},
{
bisaya: 'Salamat sa pagkaon.',
native: 'Thank you for the food.',
explanation: '"Salamat" is "Thank you", "sa pagkaon" is "for the food"'
},
{
bisaya: 'Lami kaayo!',
native: 'Very delicious!',
explanation: '"Lami" means "delicious", "kaayo" is "very"'
},
{
bisaya: 'Busog na ko.',
native: 'I am full.',
explanation: '"Busog" means "full", "na" is "already", "ko" is "I"'
},
{
bisaya: 'Kumusta ang pagkaon?',
native: 'How is the food?',
explanation: '"Kumusta" is "How", "ang pagkaon" is "the food"'
},
{
bisaya: 'Maayo kaayo ang pagkaon.',
native: 'The food is very good.',
explanation: '"Maayo" is "good", "kaayo" is "very", "ang pagkaon" is "the food"'
}
],
'Essen & Trinken': [
{
bisaya: 'Kan-on',
native: 'Rice',
explanation: '"Kan-on" is the basic word for "rice"'
},
{
bisaya: 'Tubig',
native: 'Water',
explanation: '"Tubig" means "water"'
},
{
bisaya: 'Pan',
native: 'Bread',
explanation: '"Pan" means "bread"'
},
{
bisaya: 'Isda',
native: 'Fish',
explanation: '"Isda" means "fish"'
},
{
bisaya: 'Manok',
native: 'Chicken',
explanation: '"Manok" means "chicken"'
},
{
bisaya: 'Baboy',
native: 'Pig',
explanation: '"Baboy" means "pig"'
},
{
bisaya: 'Gulay',
native: 'Vegetables',
explanation: '"Gulay" means "vegetables"'
},
{
bisaya: 'Prutas',
native: 'Fruit',
explanation: '"Prutas" means "fruit"'
},
{
bisaya: 'Gatas',
native: 'Milk',
explanation: '"Gatas" means "milk"'
},
{
bisaya: 'Kape',
native: 'Coffee',
explanation: '"Kape" means "coffee"'
},
{
bisaya: 'Tsa',
native: 'Tea',
explanation: '"Tsa" means "tea"'
},
{
bisaya: 'Asin',
native: 'Salt',
explanation: '"Asin" means "salt"'
},
{
bisaya: 'Asukar',
native: 'Sugar',
explanation: '"Asukar" means "sugar"'
},
{
bisaya: 'Tinapay',
native: 'Bread (alternative)',
explanation: '"Tinapay" is an alternative term for "bread"'
},
{
bisaya: 'Bugas',
native: 'Rice (uncooked)',
explanation: '"Bugas" is uncooked rice, "kan-on" is cooked rice'
}
]
}
};
// Erweitere für weitere Sprachen (Spanisch, Französisch, Italienisch, Portugiesisch, Tagalog)
const ADDITIONAL_LANGUAGES = {
'Spanisch': {
'Essen & Fürsorge': [
{ bisaya: 'Gutom na ko.', native: 'Tengo hambre.', explanation: '"Gutom" significa "hambre", "na" es "ya", "ko" es "yo"' },
{ bisaya: 'Gihikap ko.', native: 'Tengo sed.', explanation: '"Gihikap" significa "sed", "ko" es "yo"' },
{ bisaya: 'Gusto ka mokaon?', native: '¿Quieres comer?', explanation: '"Gusto" significa "querer", "ka" es "tú", "mokaon" es "comer"' },
{ bisaya: 'Oo, gusto ko.', native: 'Sí, quiero.', explanation: '"Oo" es "Sí", "gusto ko" es "quiero"' },
{ bisaya: 'Unsa ang gusto nimo?', native: '¿Qué quieres?', explanation: '"Unsa" es "Qué", "ang" es artículo, "gusto nimo" es "quieres"' },
{ bisaya: 'Gusto ko ug kan-on.', native: 'Quiero arroz.', explanation: '"Gusto ko" es "quiero", "ug kan-on" es "arroz"' },
{ bisaya: 'Palihug, hatagi ko ug tubig.', native: 'Por favor, dame agua.', explanation: '"Palihug" es "Por favor", "hatagi" es "dar", "ko" es "me", "ug tubig" es "agua"' },
{ bisaya: 'Salamat sa pagkaon.', native: 'Gracias por la comida.', explanation: '"Salamat" es "Gracias", "sa pagkaon" es "por la comida"' },
{ bisaya: 'Lami kaayo!', native: '¡Muy delicioso!', explanation: '"Lami" significa "delicioso", "kaayo" es "muy"' },
{ bisaya: 'Busog na ko.', native: 'Estoy lleno.', explanation: '"Busog" significa "lleno", "na" es "ya", "ko" es "yo"' },
{ bisaya: 'Kumusta ang pagkaon?', native: '¿Cómo está la comida?', explanation: '"Kumusta" es "Cómo", "ang pagkaon" es "la comida"' },
{ bisaya: 'Maayo kaayo ang pagkaon.', native: 'La comida está muy buena.', explanation: '"Maayo" es "buena", "kaayo" es "muy", "ang pagkaon" es "la comida"' }
],
'Essen & Trinken': [
{ bisaya: 'Kan-on', native: 'Arroz', explanation: '"Kan-on" es la palabra básica para "arroz"' },
{ bisaya: 'Tubig', native: 'Agua', explanation: '"Tubig" significa "agua"' },
{ bisaya: 'Pan', native: 'Pan', explanation: '"Pan" significa "pan"' },
{ bisaya: 'Isda', native: 'Pescado', explanation: '"Isda" significa "pescado"' },
{ bisaya: 'Manok', native: 'Pollo', explanation: '"Manok" significa "pollo"' },
{ bisaya: 'Baboy', native: 'Cerdo', explanation: '"Baboy" significa "cerdo"' },
{ bisaya: 'Gulay', native: 'Verduras', explanation: '"Gulay" significa "verduras"' },
{ bisaya: 'Prutas', native: 'Fruta', explanation: '"Prutas" significa "fruta"' },
{ bisaya: 'Gatas', native: 'Leche', explanation: '"Gatas" significa "leche"' },
{ bisaya: 'Kape', native: 'Café', explanation: '"Kape" significa "café"' },
{ bisaya: 'Tsa', native: 'Té', explanation: '"Tsa" significa "té"' },
{ bisaya: 'Asin', native: 'Sal', explanation: '"Asin" significa "sal"' },
{ bisaya: 'Asukar', native: 'Azúcar', explanation: '"Asukar" significa "azúcar"' },
{ bisaya: 'Tinapay', native: 'Pan (alternativo)', explanation: '"Tinapay" es un término alternativo para "pan"' },
{ bisaya: 'Bugas', native: 'Arroz (crudo)', explanation: '"Bugas" es arroz crudo, "kan-on" es arroz cocido' }
]
},
'Französisch': {
'Essen & Fürsorge': [
{ bisaya: 'Gutom na ko.', native: 'J\'ai faim.', explanation: '"Gutom" signifie "faim", "na" est "déjà", "ko" est "je"' },
{ bisaya: 'Gihikap ko.', native: 'J\'ai soif.', explanation: '"Gihikap" signifie "soif", "ko" est "je"' },
{ bisaya: 'Gusto ka mokaon?', native: 'Tu veux manger?', explanation: '"Gusto" signifie "vouloir", "ka" est "tu", "mokaon" est "manger"' },
{ bisaya: 'Oo, gusto ko.', native: 'Oui, je veux.', explanation: '"Oo" est "Oui", "gusto ko" est "je veux"' },
{ bisaya: 'Unsa ang gusto nimo?', native: 'Que veux-tu?', explanation: '"Unsa" est "Que", "ang" est article, "gusto nimo" est "tu veux"' },
{ bisaya: 'Gusto ko ug kan-on.', native: 'Je veux du riz.', explanation: '"Gusto ko" est "je veux", "ug kan-on" est "riz"' },
{ bisaya: 'Palihug, hatagi ko ug tubig.', native: 'S\'il te plaît, donne-moi de l\'eau.', explanation: '"Palihug" est "S\'il te plaît", "hatagi" est "donner", "ko" est "moi", "ug tubig" est "eau"' },
{ bisaya: 'Salamat sa pagkaon.', native: 'Merci pour la nourriture.', explanation: '"Salamat" est "Merci", "sa pagkaon" est "pour la nourriture"' },
{ bisaya: 'Lami kaayo!', native: 'Très délicieux!', explanation: '"Lami" signifie "délicieux", "kaayo" est "très"' },
{ bisaya: 'Busog na ko.', native: 'Je suis rassasié.', explanation: '"Busog" signifie "rassasié", "na" est "déjà", "ko" est "je"' },
{ bisaya: 'Kumusta ang pagkaon?', native: 'Comment est la nourriture?', explanation: '"Kumusta" est "Comment", "ang pagkaon" est "la nourriture"' },
{ bisaya: 'Maayo kaayo ang pagkaon.', native: 'La nourriture est très bonne.', explanation: '"Maayo" est "bonne", "kaayo" est "très", "ang pagkaon" est "la nourriture"' }
],
'Essen & Trinken': [
{ bisaya: 'Kan-on', native: 'Riz', explanation: '"Kan-on" est le mot de base pour "riz"' },
{ bisaya: 'Tubig', native: 'Eau', explanation: '"Tubig" signifie "eau"' },
{ bisaya: 'Pan', native: 'Pain', explanation: '"Pan" signifie "pain"' },
{ bisaya: 'Isda', native: 'Poisson', explanation: '"Isda" signifie "poisson"' },
{ bisaya: 'Manok', native: 'Poulet', explanation: '"Manok" signifie "poulet"' },
{ bisaya: 'Baboy', native: 'Porc', explanation: '"Baboy" signifie "porc"' },
{ bisaya: 'Gulay', native: 'Légumes', explanation: '"Gulay" signifie "légumes"' },
{ bisaya: 'Prutas', native: 'Fruit', explanation: '"Prutas" signifie "fruit"' },
{ bisaya: 'Gatas', native: 'Lait', explanation: '"Gatas" signifie "lait"' },
{ bisaya: 'Kape', native: 'Café', explanation: '"Kape" signifie "café"' },
{ bisaya: 'Tsa', native: 'Thé', explanation: '"Tsa" signifie "thé"' },
{ bisaya: 'Asin', native: 'Sel', explanation: '"Asin" signifie "sel"' },
{ bisaya: 'Asukar', native: 'Sucre', explanation: '"Asukar" signifie "sucre"' },
{ bisaya: 'Tinapay', native: 'Pain (alternatif)', explanation: '"Tinapay" est un terme alternatif pour "pain"' },
{ bisaya: 'Bugas', native: 'Riz (cru)', explanation: '"Bugas" est riz cru, "kan-on" est riz cuit' }
]
},
'Italienisch': {
'Essen & Fürsorge': [
{ bisaya: 'Gutom na ko.', native: 'Ho fame.', explanation: '"Gutom" significa "fame", "na" è "già", "ko" è "io"' },
{ bisaya: 'Gihikap ko.', native: 'Ho sete.', explanation: '"Gihikap" significa "sete", "ko" è "io"' },
{ bisaya: 'Gusto ka mokaon?', native: 'Vuoi mangiare?', explanation: '"Gusto" significa "volere", "ka" è "tu", "mokaon" è "mangiare"' },
{ bisaya: 'Oo, gusto ko.', native: 'Sì, voglio.', explanation: '"Oo" è "Sì", "gusto ko" è "voglio"' },
{ bisaya: 'Unsa ang gusto nimo?', native: 'Cosa vuoi?', explanation: '"Unsa" è "Cosa", "ang" è articolo, "gusto nimo" è "vuoi"' },
{ bisaya: 'Gusto ko ug kan-on.', native: 'Voglio riso.', explanation: '"Gusto ko" è "voglio", "ug kan-on" è "riso"' },
{ bisaya: 'Palihug, hatagi ko ug tubig.', native: 'Per favore, dammi acqua.', explanation: '"Palihug" è "Per favore", "hatagi" è "dare", "ko" è "mi", "ug tubig" è "acqua"' },
{ bisaya: 'Salamat sa pagkaon.', native: 'Grazie per il cibo.', explanation: '"Salamat" è "Grazie", "sa pagkaon" è "per il cibo"' },
{ bisaya: 'Lami kaayo!', native: 'Molto delizioso!', explanation: '"Lami" significa "delizioso", "kaayo" è "molto"' },
{ bisaya: 'Busog na ko.', native: 'Sono sazio.', explanation: '"Busog" significa "sazio", "na" è "già", "ko" è "io"' },
{ bisaya: 'Kumusta ang pagkaon?', native: 'Com\'è il cibo?', explanation: '"Kumusta" è "Come", "ang pagkaon" è "il cibo"' },
{ bisaya: 'Maayo kaayo ang pagkaon.', native: 'Il cibo è molto buono.', explanation: '"Maayo" è "buono", "kaayo" è "molto", "ang pagkaon" è "il cibo"' }
],
'Essen & Trinken': [
{ bisaya: 'Kan-on', native: 'Riso', explanation: '"Kan-on" è la parola base per "riso"' },
{ bisaya: 'Tubig', native: 'Acqua', explanation: '"Tubig" significa "acqua"' },
{ bisaya: 'Pan', native: 'Pane', explanation: '"Pan" significa "pane"' },
{ bisaya: 'Isda', native: 'Pesce', explanation: '"Isda" significa "pesce"' },
{ bisaya: 'Manok', native: 'Pollo', explanation: '"Manok" significa "pollo"' },
{ bisaya: 'Baboy', native: 'Maiale', explanation: '"Baboy" significa "maiale"' },
{ bisaya: 'Gulay', native: 'Verdura', explanation: '"Gulay" significa "verdura"' },
{ bisaya: 'Prutas', native: 'Frutta', explanation: '"Prutas" significa "frutta"' },
{ bisaya: 'Gatas', native: 'Latte', explanation: '"Gatas" significa "latte"' },
{ bisaya: 'Kape', native: 'Caffè', explanation: '"Kape" significa "caffè"' },
{ bisaya: 'Tsa', native: 'Tè', explanation: '"Tsa" significa "tè"' },
{ bisaya: 'Asin', native: 'Sale', explanation: '"Asin" significa "sale"' },
{ bisaya: 'Asukar', native: 'Zucchero', explanation: '"Asukar" significa "zucchero"' },
{ bisaya: 'Tinapay', native: 'Pane (alternativo)', explanation: '"Tinapay" è un termine alternativo per "pane"' },
{ bisaya: 'Bugas', native: 'Riso (crudo)', explanation: '"Bugas" è riso crudo, "kan-on" è riso cotto' }
]
},
'Portugiesisch': {
'Essen & Fürsorge': [
{ bisaya: 'Gutom na ko.', native: 'Tenho fome.', explanation: '"Gutom" significa "fome", "na" é "já", "ko" é "eu"' },
{ bisaya: 'Gihikap ko.', native: 'Tenho sede.', explanation: '"Gihikap" significa "sede", "ko" é "eu"' },
{ bisaya: 'Gusto ka mokaon?', native: 'Quer comer?', explanation: '"Gusto" significa "querer", "ka" é "você", "mokaon" é "comer"' },
{ bisaya: 'Oo, gusto ko.', native: 'Sim, quero.', explanation: '"Oo" é "Sim", "gusto ko" é "quero"' },
{ bisaya: 'Unsa ang gusto nimo?', native: 'O que você quer?', explanation: '"Unsa" é "O que", "ang" é artigo, "gusto nimo" é "você quer"' },
{ bisaya: 'Gusto ko ug kan-on.', native: 'Quero arroz.', explanation: '"Gusto ko" é "quero", "ug kan-on" é "arroz"' },
{ bisaya: 'Palihug, hatagi ko ug tubig.', native: 'Por favor, me dê água.', explanation: '"Palihug" é "Por favor", "hatagi" é "dar", "ko" é "me", "ug tubig" é "água"' },
{ bisaya: 'Salamat sa pagkaon.', native: 'Obrigado pela comida.', explanation: '"Salamat" é "Obrigado", "sa pagkaon" é "pela comida"' },
{ bisaya: 'Lami kaayo!', native: 'Muito delicioso!', explanation: '"Lami" significa "delicioso", "kaayo" é "muito"' },
{ bisaya: 'Busog na ko.', native: 'Estou cheio.', explanation: '"Busog" significa "cheio", "na" é "já", "ko" é "eu"' },
{ bisaya: 'Kumusta ang pagkaon?', native: 'Como está a comida?', explanation: '"Kumusta" é "Como", "ang pagkaon" é "a comida"' },
{ bisaya: 'Maayo kaayo ang pagkaon.', native: 'A comida está muito boa.', explanation: '"Maayo" é "boa", "kaayo" é "muito", "ang pagkaon" é "a comida"' }
],
'Essen & Trinken': [
{ bisaya: 'Kan-on', native: 'Arroz', explanation: '"Kan-on" é a palavra básica para "arroz"' },
{ bisaya: 'Tubig', native: 'Água', explanation: '"Tubig" significa "água"' },
{ bisaya: 'Pan', native: 'Pão', explanation: '"Pan" significa "pão"' },
{ bisaya: 'Isda', native: 'Peixe', explanation: '"Isda" significa "peixe"' },
{ bisaya: 'Manok', native: 'Frango', explanation: '"Manok" significa "frango"' },
{ bisaya: 'Baboy', native: 'Porco', explanation: '"Baboy" significa "porco"' },
{ bisaya: 'Gulay', native: 'Legumes', explanation: '"Gulay" significa "legumes"' },
{ bisaya: 'Prutas', native: 'Fruta', explanation: '"Prutas" significa "fruta"' },
{ bisaya: 'Gatas', native: 'Leite', explanation: '"Gatas" significa "leite"' },
{ bisaya: 'Kape', native: 'Café', explanation: '"Kape" significa "café"' },
{ bisaya: 'Tsa', native: 'Chá', explanation: '"Tsa" significa "chá"' },
{ bisaya: 'Asin', native: 'Sal', explanation: '"Asin" significa "sal"' },
{ bisaya: 'Asukar', native: 'Açúcar', explanation: '"Asukar" significa "açúcar"' },
{ bisaya: 'Tinapay', native: 'Pão (alternativo)', explanation: '"Tinapay" é um termo alternativo para "pão"' },
{ bisaya: 'Bugas', native: 'Arroz (cru)', explanation: '"Bugas" é arroz cru, "kan-on" é arroz cozido' }
]
},
'Tagalog': {
'Essen & Fürsorge': [
{ bisaya: 'Gutom na ko.', native: 'Gutom na ako.', explanation: '"Gutom" ay "gutom", "na" ay "na", "ko" ay "ako"' },
{ bisaya: 'Gihikap ko.', native: 'Nauuhaw ako.', explanation: '"Gihikap" ay "nauuhaw", "ko" ay "ako"' },
{ bisaya: 'Gusto ka mokaon?', native: 'Gusto mo bang kumain?', explanation: '"Gusto" ay "gusto", "ka" ay "mo", "mokaon" ay "kumain"' },
{ bisaya: 'Oo, gusto ko.', native: 'Oo, gusto ko.', explanation: '"Oo" ay "Oo", "gusto ko" ay "gusto ko"' },
{ bisaya: 'Unsa ang gusto nimo?', native: 'Ano ang gusto mo?', explanation: '"Unsa" ay "Ano", "ang" ay "ang", "gusto nimo" ay "gusto mo"' },
{ bisaya: 'Gusto ko ug kan-on.', native: 'Gusto ko ng kanin.', explanation: '"Gusto ko" ay "gusto ko", "ug kan-on" ay "kanin"' },
{ bisaya: 'Palihug, hatagi ko ug tubig.', native: 'Pakiusap, bigyan mo ako ng tubig.', explanation: '"Palihug" ay "Pakiusap", "hatagi" ay "bigyan", "ko" ay "ako", "ug tubig" ay "tubig"' },
{ bisaya: 'Salamat sa pagkaon.', native: 'Salamat sa pagkain.', explanation: '"Salamat" ay "Salamat", "sa pagkaon" ay "sa pagkain"' },
{ bisaya: 'Lami kaayo!', native: 'Masarap talaga!', explanation: '"Lami" ay "masarap", "kaayo" ay "talaga"' },
{ bisaya: 'Busog na ko.', native: 'Busog na ako.', explanation: '"Busog" ay "busog", "na" ay "na", "ko" ay "ako"' },
{ bisaya: 'Kumusta ang pagkaon?', native: 'Kumusta ang pagkain?', explanation: '"Kumusta" ay "Kumusta", "ang pagkaon" ay "ang pagkain"' },
{ bisaya: 'Maayo kaayo ang pagkaon.', native: 'Mabuti talaga ang pagkain.', explanation: '"Maayo" ay "mabuti", "kaayo" ay "talaga", "ang pagkaon" ay "ang pagkain"' }
],
'Essen & Trinken': [
{ bisaya: 'Kan-on', native: 'Kanin', explanation: '"Kan-on" ay ang salitang base para sa "kanin"' },
{ bisaya: 'Tubig', native: 'Tubig', explanation: '"Tubig" ay "tubig"' },
{ bisaya: 'Pan', native: 'Tinapay', explanation: '"Pan" ay "tinapay"' },
{ bisaya: 'Isda', native: 'Isda', explanation: '"Isda" ay "isda"' },
{ bisaya: 'Manok', native: 'Manok', explanation: '"Manok" ay "manok"' },
{ bisaya: 'Baboy', native: 'Baboy', explanation: '"Baboy" ay "baboy"' },
{ bisaya: 'Gulay', native: 'Gulay', explanation: '"Gulay" ay "gulay"' },
{ bisaya: 'Prutas', native: 'Prutas', explanation: '"Prutas" ay "prutas"' },
{ bisaya: 'Gatas', native: 'Gatas', explanation: '"Gatas" ay "gatas"' },
{ bisaya: 'Kape', native: 'Kape', explanation: '"Kape" ay "kape"' },
{ bisaya: 'Tsa', native: 'Tsa', explanation: '"Tsa" ay "tsa"' },
{ bisaya: 'Asin', native: 'Asin', explanation: '"Asin" ay "asin"' },
{ bisaya: 'Asukar', native: 'Asukal', explanation: '"Asukar" ay "asukal"' },
{ bisaya: 'Tinapay', native: 'Tinapay', explanation: '"Tinapay" ay "tinapay"' },
{ bisaya: 'Bugas', native: 'Bigas', explanation: '"Bugas" ay "bigas", "kan-on" ay "kanin"' }
]
}
};
// Kombiniere alle Sprachen
const ALL_FOOD_CARE = { ...FOOD_CARE_CONVERSATIONS, ...ADDITIONAL_LANGUAGES };
async function findOrCreateSystemUser() {
let systemUser = await User.findOne({
where: {
username: { [Op.in]: ['system', 'admin', 'System', 'Admin'] }
}
});
if (!systemUser) {
console.error('❌ System-Benutzer nicht gefunden.');
throw new Error('System user not found');
}
return systemUser;
}
async function updateFoodCareExercises() {
await sequelize.authenticate();
console.log('Datenbankverbindung erfolgreich hergestellt.\n');
const systemUser = await findOrCreateSystemUser();
console.log(`Verwende System-Benutzer: ${systemUser.username} (ID: ${systemUser.id})\n`);
// Finde alle Bisaya-Kurse
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 courses = await VocabCourse.findAll({
where: { languageId: bisayaLanguage.id },
include: [
{
model: sequelize.models.VocabLanguage,
as: 'nativeLanguage',
attributes: ['name']
}
]
});
console.log(`Gefunden: ${courses.length} Bisaya-Kurse\n`);
let totalExercisesCreated = 0;
let totalLessonsUpdated = 0;
for (const course of courses) {
console.log(`📚 Kurs: ${course.title} (ID: ${course.id})`);
const nativeLangName = course.nativeLanguage?.name || 'Deutsch';
console.log(` Muttersprache: ${nativeLangName}`);
// Finde "Essen & Fürsorge" und "Essen & Trinken" Lektionen
const lessons = await VocabCourseLesson.findAll({
where: {
courseId: course.id,
title: ['Essen & Fürsorge', 'Essen & Trinken']
},
order: [['lessonNumber', 'ASC']]
});
console.log(` ${lessons.length} Lektion(en) gefunden\n`);
for (const lesson of lessons) {
const conversations = ALL_FOOD_CARE[nativeLangName]?.[lesson.title];
if (!conversations || conversations.length === 0) {
console.log(` ⚠️ Lektion ${lesson.lessonNumber}: "${lesson.title}" - keine Übungen für Muttersprache "${nativeLangName}" definiert`);
continue;
}
// Lösche bestehende Übungen
const deletedCount = await VocabGrammarExercise.destroy({
where: { lessonId: lesson.id }
});
console.log(` 🗑️ Lektion ${lesson.lessonNumber}: "${lesson.title}" - ${deletedCount} alte Übung(en) gelöscht`);
// Erstelle neue Übungen basierend auf dem Lektionstyp
let exerciseNumber = 1;
if (lesson.title === 'Essen & Fürsorge') {
// Gesprächsübungen für "Essen & Fürsorge"
for (const conv of conversations) {
// Multiple Choice: Übersetzung von Muttersprache zu Bisaya
await VocabGrammarExercise.create({
lessonId: lesson.id,
exerciseTypeId: 2, // multiple_choice
exerciseNumber: exerciseNumber++,
title: `Wie sagt man "${conv.native}"?`,
instruction: 'Wähle die richtige Übersetzung.',
questionData: JSON.stringify({
type: 'multiple_choice',
question: `Wie sagt man "${conv.native}" auf Bisaya?`,
options: [
conv.bisaya,
conversations[(exerciseNumber - 2 + 1) % conversations.length]?.bisaya || 'Salamat',
conversations[(exerciseNumber - 2 + 2) % conversations.length]?.bisaya || 'Maayo',
conversations[(exerciseNumber - 2 + 3) % conversations.length]?.bisaya || 'Palihug'
]
}),
answerData: JSON.stringify({
type: 'multiple_choice',
correctAnswer: 0
}),
explanation: conv.explanation,
createdByUserId: course.ownerUserId || systemUser.id
});
totalExercisesCreated++;
// Multiple Choice: Übersetzung von Bisaya zu Muttersprache
await VocabGrammarExercise.create({
lessonId: lesson.id,
exerciseTypeId: 2, // multiple_choice
exerciseNumber: exerciseNumber++,
title: `Was bedeutet "${conv.bisaya}"?`,
instruction: 'Wähle die richtige Übersetzung.',
questionData: JSON.stringify({
type: 'multiple_choice',
question: `Was bedeutet "${conv.bisaya}"?`,
options: [
conv.native,
conversations[(exerciseNumber - 3 + 1) % conversations.length]?.native || 'Danke',
conversations[(exerciseNumber - 3 + 2) % conversations.length]?.native || 'Bitte',
conversations[(exerciseNumber - 3 + 3) % conversations.length]?.native || 'Gut'
]
}),
answerData: JSON.stringify({
type: 'multiple_choice',
correctAnswer: 0
}),
explanation: conv.explanation,
createdByUserId: course.ownerUserId || systemUser.id
});
totalExercisesCreated++;
}
// Transformation-Übungen
const selectedConvs = conversations.slice(0, 3);
for (const conv of selectedConvs) {
await VocabGrammarExercise.create({
lessonId: lesson.id,
exerciseTypeId: 4, // transformation
exerciseNumber: exerciseNumber++,
title: `Übersetze: "${conv.native}"`,
instruction: 'Übersetze den Satz ins Bisaya.',
questionData: JSON.stringify({
type: 'transformation',
text: conv.native,
sourceLanguage: nativeLangName,
targetLanguage: 'Bisaya'
}),
answerData: JSON.stringify({
type: 'transformation',
correct: conv.bisaya,
alternatives: []
}),
explanation: conv.explanation,
createdByUserId: course.ownerUserId || systemUser.id
});
totalExercisesCreated++;
}
} else if (lesson.title === 'Essen & Trinken') {
// Vokabular-Übungen für "Essen & Trinken"
for (const vocab of conversations) {
// Multiple Choice: Muttersprache -> Bisaya
await VocabGrammarExercise.create({
lessonId: lesson.id,
exerciseTypeId: 2, // multiple_choice
exerciseNumber: exerciseNumber++,
title: `Wie sagt man "${vocab.native}"?`,
instruction: 'Wähle die richtige Übersetzung.',
questionData: JSON.stringify({
type: 'multiple_choice',
question: `Wie sagt man "${vocab.native}" auf Bisaya?`,
options: [
vocab.bisaya,
conversations[(exerciseNumber - 2 + 1) % conversations.length]?.bisaya || 'Salamat',
conversations[(exerciseNumber - 2 + 2) % conversations.length]?.bisaya || 'Maayo',
conversations[(exerciseNumber - 2 + 3) % conversations.length]?.bisaya || 'Palihug'
]
}),
answerData: JSON.stringify({
type: 'multiple_choice',
correctAnswer: 0
}),
explanation: vocab.explanation,
createdByUserId: course.ownerUserId || systemUser.id
});
totalExercisesCreated++;
// Multiple Choice: Bisaya -> Muttersprache
await VocabGrammarExercise.create({
lessonId: lesson.id,
exerciseTypeId: 2, // multiple_choice
exerciseNumber: exerciseNumber++,
title: `Was bedeutet "${vocab.bisaya}"?`,
instruction: 'Wähle die richtige Übersetzung.',
questionData: JSON.stringify({
type: 'multiple_choice',
question: `Was bedeutet "${vocab.bisaya}"?`,
options: [
vocab.native,
conversations[(exerciseNumber - 3 + 1) % conversations.length]?.native || 'Danke',
conversations[(exerciseNumber - 3 + 2) % conversations.length]?.native || 'Bitte',
conversations[(exerciseNumber - 3 + 3) % conversations.length]?.native || 'Gut'
]
}),
answerData: JSON.stringify({
type: 'multiple_choice',
correctAnswer: 0
}),
explanation: vocab.explanation,
createdByUserId: course.ownerUserId || systemUser.id
});
totalExercisesCreated++;
}
}
}
console.log(`${lessons.length} Lektion(en) aktualisiert\n`);
totalLessonsUpdated += lessons.length;
}
console.log(`\n🎉 Zusammenfassung:`);
console.log(` ${totalLessonsUpdated} Lektionen aktualisiert`);
console.log(` ${totalExercisesCreated} neue Grammatik-Übungen erstellt`);
}
updateFoodCareExercises()
.then(() => {
sequelize.close();
process.exit(0);
})
.catch((error) => {
console.error('❌ Fehler:', error);
sequelize.close();
process.exit(1);
});