Refactor lesson types and update review handling
All checks were successful
Deploy to production / deploy (push) Successful in 2m22s

- Changed lesson type from 'review' to 'weekly_review' in multiple lesson definitions across phase 3 and phase 4 extensions.
- Updated the logic in the vocabService to accommodate 'weekly_review' in various methods, ensuring proper handling of weekly review lessons.
- Modified the VocabLessonView component to recognize 'weekly_review' as a valid lesson type for calculations and access checks.
- Enhanced the didactics update script to include 'weekly_review' in the lesson type checks.
- Adjusted the create scripts to reflect the new lesson type for weekly reviews.
This commit is contained in:
Torsten Schulz (local)
2026-05-27 11:34:03 +02:00
parent 664a7b3530
commit d441b4fa31
9 changed files with 131 additions and 67 deletions

View File

@@ -1200,7 +1200,7 @@ export default {
if (['dialogue', 'phrases', 'survival', 'grammar'].includes(lessonType)) {
return 1.2;
}
if (lessonType === 'review' || lessonType === 'vocab_review') {
if (lessonType === 'review' || lessonType === 'vocab_review' || lessonType === 'weekly_review') {
return 0.9;
}
return 1;
@@ -1216,7 +1216,7 @@ export default {
},
trainerMinimumCurrentExposures() {
const mode = this.lessonPedagogy?.didacticMode || this.lesson?.lessonType || '';
if (mode === 'intensive_review' || mode === 'review' || mode === 'vocab_review') {
if (mode === 'intensive_review' || mode === 'review' || mode === 'vocab_review' || mode === 'weekly_review') {
return 2;
}
if (['grammar', 'dialogue', 'phrases', 'survival'].includes(this.lesson?.lessonType)) {
@@ -1243,8 +1243,8 @@ export default {
}
const lessonType = String(this.lesson?.lessonType || '').toLowerCase();
const didacticMode = String(this.lessonPedagogy?.didacticMode || '').toLowerCase();
const isReviewLesson = ['review', 'vocab_review'].includes(lessonType)
|| ['review', 'vocab_review', 'intensive_review'].includes(didacticMode);
const isReviewLesson = ['review', 'vocab_review', 'weekly_review'].includes(lessonType)
|| ['review', 'vocab_review', 'weekly_review', 'intensive_review'].includes(didacticMode);
if (isReviewLesson) {
// In Wiederholungslektionen soll altes Material frueher und staerker einfliesen.
@@ -1266,8 +1266,8 @@ export default {
}
const lessonType = String(this.lesson?.lessonType || '').toLowerCase();
const didacticMode = String(this.lessonPedagogy?.didacticMode || '').toLowerCase();
const isReviewLesson = ['review', 'vocab_review'].includes(lessonType)
|| ['review', 'vocab_review', 'intensive_review'].includes(didacticMode);
const isReviewLesson = ['review', 'vocab_review', 'weekly_review'].includes(lessonType)
|| ['review', 'vocab_review', 'weekly_review', 'intensive_review'].includes(didacticMode);
if (isReviewLesson) {
return Math.max(0.25, 1 - this.currentReviewShare);
@@ -1329,7 +1329,7 @@ export default {
canAccessExercises() {
if (!this.hasExercises) return false;
if (this.exerciseNeedsReinforcement) return false;
const isReview = this.lesson?.lessonType === 'review' || this.lesson?.lessonType === 'vocab_review';
const isReview = ['review', 'vocab_review', 'weekly_review'].includes(this.lesson?.lessonType);
if (isReview) return true;
if (this.trainableLessonVocab.length === 0 && this.prepItems.length > 0) {
return this.lessonPrepStage >= 2;
@@ -1358,7 +1358,7 @@ export default {
/** Für Wiederholungslektionen: Übungen aus vorherigen Lektionen (Kapitelprüfung). Sonst: eigene Grammatik-Übungen. */
effectiveExercises() {
if (!this.lesson) return [];
const isReview = this.lesson.lessonType === 'review' || this.lesson.lessonType === 'vocab_review';
const isReview = ['review', 'vocab_review', 'weekly_review'].includes(this.lesson.lessonType);
if (isReview && this.lesson.reviewVocabExercises && Array.isArray(this.lesson.reviewVocabExercises) && this.lesson.reviewVocabExercises.length > 0) {
return this.lesson.reviewVocabExercises;
}
@@ -1504,9 +1504,10 @@ export default {
importantVocab() {
// Extrahiere wichtige Begriffe aus den Übungen
try {
// Bei Wiederholungslektionen: Verwende Vokabeln aus vorherigen Lektionen (effectiveExercises = reviewVocabExercises)
// Normale Lektion: Verwende effectiveExercises (grammarExercises)
const exercises = this.effectiveExercises;
// Wochenwiederholungen trainieren die vollständige Wochenmenge; geprüft wird nur eine Teilmenge.
const exercises = this.lesson?.lessonType === 'weekly_review'
? this.lesson.weeklyReviewTrainingExercises
: this.effectiveExercises;
if (!exercises || !Array.isArray(exercises) || exercises.length === 0) {
debugLog('[importantVocab] Keine Übungen vorhanden');
return [];
@@ -3042,7 +3043,8 @@ export default {
conversation: this.$t('socialnetwork.vocab.courses.lessonTypeConversation'),
culture: this.$t('socialnetwork.vocab.courses.lessonTypeCulture'),
review: this.$t('socialnetwork.vocab.courses.lessonTypeReview'),
vocab_review: this.$t('socialnetwork.vocab.courses.lessonTypeReview')
vocab_review: this.$t('socialnetwork.vocab.courses.lessonTypeReview'),
weekly_review: this.$t('socialnetwork.vocab.courses.lessonTypeReview')
};
return labels[lessonType] || lessonType || this.$t('socialnetwork.vocab.courses.lessonTypeVocab');
},
@@ -3869,8 +3871,8 @@ export default {
const lessonType = String(this.lesson?.lessonType || '').toLowerCase();
const didacticMode = String(this.lessonPedagogy?.didacticMode || '').toLowerCase();
const isReviewLesson = ['review', 'vocab_review'].includes(lessonType)
|| ['review', 'vocab_review', 'intensive_review'].includes(didacticMode);
const isReviewLesson = ['review', 'vocab_review', 'weekly_review'].includes(lessonType)
|| ['review', 'vocab_review', 'weekly_review', 'intensive_review'].includes(didacticMode);
// Reviews sollen nicht nur aus Multiple Choice bestehen:
// früherer Wechsel zu Typing, damit aktiver Abruf im Vordergrund steht.
const switchAfterAttempts = isReviewLesson