From 9d663e4f2b034ca1d2032201bc754463eda57870 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 2 Apr 2026 13:27:24 +0200 Subject: [PATCH] feat(vocab): enhance lesson progress tracking and review scheduling - Updated VocabService to include lessonId and lessonNumber in progress data, improving tracking accuracy. - Modified getLessonProgress and lastProgressTouch methods to accept lesson parameters, enhancing flexibility in progress retrieval. - Implemented formatReviewBadgeSchedule method to manage review scheduling notifications, providing clearer user feedback. - Updated VocabCourseView to reflect changes in lesson progress handling, ensuring accurate display of review statuses and due dates. - Expanded localization for review scheduling messages across multiple languages, enhancing user experience. --- backend/services/vocabService.js | 2 + .../src/i18n/locales/ceb/socialnetwork.json | 4 + .../src/i18n/locales/de/socialnetwork.json | 4 + .../src/i18n/locales/en/socialnetwork.json | 4 + .../src/i18n/locales/es/socialnetwork.json | 4 + frontend/src/views/social/VocabCourseView.vue | 101 +++++++++++++----- 6 files changed, 93 insertions(+), 26 deletions(-) diff --git a/backend/services/vocabService.js b/backend/services/vocabService.js index 036b999..9299b80 100644 --- a/backend/services/vocabService.js +++ b/backend/services/vocabService.js @@ -291,6 +291,8 @@ export default class VocabService { return { ...plainProgress, + lessonId: Number(plainProgress.lessonId), + lessonNumber: lessonData?.lessonNumber ?? plainProgress.lesson?.lessonNumber ?? null, lessonState, targetScore, hasReachedTarget, diff --git a/frontend/src/i18n/locales/ceb/socialnetwork.json b/frontend/src/i18n/locales/ceb/socialnetwork.json index 03948e1..c26781e 100644 --- a/frontend/src/i18n/locales/ceb/socialnetwork.json +++ b/frontend/src/i18n/locales/ceb/socialnetwork.json @@ -341,6 +341,10 @@ "reviewDueToday": "angay karon", "reviewDueSinceOneDay": "angay na sukad 1 ka adlaw", "reviewDueSinceDays": "angay na sukad {count} ka adlaw", + "reviewBadgeScheduleTomorrow": "sunod nga wave ugma", + "reviewBadgeScheduleInDays": "sunod nga wave sulod sa {count} ka adlaw", + "reviewBadgeScheduleToday": "gitakda ang wave karon", + "reviewBadgeScheduleOverdue": "nilapas na ang wave sukad {count} ka adlaw", "reviewStageDay1": "Adlaw 1", "reviewStageDay3": "Adlaw 3", "reviewStageDay7": "Adlaw 7", diff --git a/frontend/src/i18n/locales/de/socialnetwork.json b/frontend/src/i18n/locales/de/socialnetwork.json index 7dc9481..9f29ecd 100644 --- a/frontend/src/i18n/locales/de/socialnetwork.json +++ b/frontend/src/i18n/locales/de/socialnetwork.json @@ -696,6 +696,10 @@ "reviewDueToday": "heute fällig", "reviewDueSinceOneDay": "seit 1 Tag fällig", "reviewDueSinceDays": "seit {count} Tagen fällig", + "reviewBadgeScheduleTomorrow": "nächste Welle morgen", + "reviewBadgeScheduleInDays": "nächste Welle in {count} Tagen", + "reviewBadgeScheduleToday": "Welle heute vorgesehen", + "reviewBadgeScheduleOverdue": "Welle überfällig (seit {count} Tagen)", "reviewStageDay1": "Tag 1", "reviewStageDay3": "Tag 3", "reviewStageDay7": "Tag 7", diff --git a/frontend/src/i18n/locales/en/socialnetwork.json b/frontend/src/i18n/locales/en/socialnetwork.json index 2548457..d0e699e 100644 --- a/frontend/src/i18n/locales/en/socialnetwork.json +++ b/frontend/src/i18n/locales/en/socialnetwork.json @@ -696,6 +696,10 @@ "reviewDueToday": "due today", "reviewDueSinceOneDay": "due since 1 day", "reviewDueSinceDays": "due since {count} days", + "reviewBadgeScheduleTomorrow": "next review wave tomorrow", + "reviewBadgeScheduleInDays": "next wave in {count} days", + "reviewBadgeScheduleToday": "wave slated for today", + "reviewBadgeScheduleOverdue": "wave overdue ({count} days)", "reviewStageDay1": "Day 1", "reviewStageDay3": "Day 3", "reviewStageDay7": "Day 7", diff --git a/frontend/src/i18n/locales/es/socialnetwork.json b/frontend/src/i18n/locales/es/socialnetwork.json index 313f5ed..2dbc065 100644 --- a/frontend/src/i18n/locales/es/socialnetwork.json +++ b/frontend/src/i18n/locales/es/socialnetwork.json @@ -694,6 +694,10 @@ "reviewDueToday": "vence hoy", "reviewDueSinceOneDay": "vence desde hace 1 día", "reviewDueSinceDays": "vence desde hace {count} días", + "reviewBadgeScheduleTomorrow": "siguiente ola mañana", + "reviewBadgeScheduleInDays": "siguiente ola en {count} días", + "reviewBadgeScheduleToday": "ola prevista hoy", + "reviewBadgeScheduleOverdue": "ola atrasada ({count} días)", "reviewStageDay1": "Día 1", "reviewStageDay3": "Día 3", "reviewStageDay7": "Día 7", diff --git a/frontend/src/views/social/VocabCourseView.vue b/frontend/src/views/social/VocabCourseView.vue index b0e933c..5529315 100644 --- a/frontend/src/views/social/VocabCourseView.vue +++ b/frontend/src/views/social/VocabCourseView.vue @@ -69,7 +69,7 @@ @click="openLesson(lesson.id)" > {{ lesson.title }} - {{ formatReviewDue(getLessonProgress(lesson.id)?.reviewNextDueAt) }} + {{ formatReviewDue(getLessonProgress(lesson.id, lesson)?.reviewNextDueAt) }}

{{ $t('socialnetwork.vocab.courses.courseFlowReviewEmpty') }}

@@ -164,21 +164,21 @@
#{{ lesson.lessonNumber }}
- + {{ $t('socialnetwork.vocab.courses.completed') }} - - {{ $t('socialnetwork.vocab.courses.score') }}: {{ getLessonProgress(lesson.id).score }}% + + {{ $t('socialnetwork.vocab.courses.score') }}: {{ getLessonProgress(lesson.id, lesson).score }}% {{ $t('socialnetwork.vocab.courses.notStarted') }} - {{ getReviewBadgeLabel(getLessonProgress(lesson.id)) }} + {{ getReviewBadgeLabel(getLessonProgress(lesson.id, lesson)) }}
@@ -199,10 +199,10 @@ :disabled="!canStartLesson(lesson)" :title="!canStartLesson(lesson) ? $t('socialnetwork.vocab.courses.previousLessonRequired') : ''" > - {{ getLessonProgress(lesson.id)?.completed ? $t('socialnetwork.vocab.courses.review') : $t('socialnetwork.vocab.courses.start') }} + {{ getLessonProgress(lesson.id, lesson)?.completed ? $t('socialnetwork.vocab.courses.review') : $t('socialnetwork.vocab.courses.start') }}