- Replaced the Sequelize findAll method with a raw SQL query to fetch Bisaya courses along with native language information, enhancing performance. - Updated variable names for consistency and clarity, ensuring better readability of the code. - Adjusted the handling of course owner IDs to align with the new query structure, improving data integrity.
731 lines
33 KiB
JavaScript
Executable File
731 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 bisayaLanguageId = bisayaLanguage.id;
|
|
|
|
// Hole alle Bisaya-Kurse mit native language info
|
|
const courses = await sequelize.query(
|
|
`SELECT
|
|
c.id,
|
|
c.title,
|
|
c.owner_user_id,
|
|
c.native_language_id,
|
|
nl.name as native_language_name
|
|
FROM community.vocab_course c
|
|
LEFT JOIN community.vocab_language nl ON c.native_language_id = nl.id
|
|
WHERE c.language_id = :bisayaLanguageId`,
|
|
{
|
|
replacements: { bisayaLanguageId },
|
|
type: sequelize.QueryTypes.SELECT
|
|
}
|
|
);
|
|
|
|
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.native_language_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.owner_user_id || 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.owner_user_id || 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.owner_user_id || 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.owner_user_id || 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.owner_user_id || 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);
|
|
});
|