feat(admin): add potential fathers retrieval for character management
All checks were successful
Deploy to production / deploy (push) Successful in 2m47s

- Implemented a new method in AdminService to fetch potential fathers for a given character based on existing relationships.
- Updated AdminController to expose this functionality via a new API endpoint.
- Enhanced adminRouter to include the route for retrieving potential fathers.
- Modified frontend components to allow selection of potential fathers during pregnancy and birth management.
- Updated internationalization files to include new translation keys related to father selection.
This commit is contained in:
Torsten Schulz (local)
2026-03-31 08:50:56 +02:00
parent ee11a989a0
commit 9a78bc7c4b
30 changed files with 3907 additions and 45 deletions

View File

@@ -12,6 +12,7 @@ import VocabGrammarExercise from '../models/community/vocab_grammar_exercise.js'
import VocabCourseProgress from '../models/community/vocab_course_progress.js';
import VocabGrammarExerciseProgress from '../models/community/vocab_grammar_exercise_progress.js';
import { Op } from 'sequelize';
import { getBisayaLessonPedagogy } from './bisaya-course-phase2-pedagogy.js';
const LESSON_DIDACTICS = {
'Begrüßungen & Höflichkeit': {
@@ -171,14 +172,23 @@ async function applyBisayaCourseRefresh() {
for (const lesson of lessons) {
const didactics = LESSON_DIDACTICS[lesson.title];
if (!didactics) continue;
const pedagogy = getBisayaLessonPedagogy(lesson.lessonNumber);
if (!didactics && !pedagogy) continue;
const normalizedDidactics = didactics || {};
await lesson.update({
learningGoals: didactics.learningGoals || [],
corePatterns: didactics.corePatterns || [],
grammarFocus: didactics.grammarFocus || [],
speakingPrompts: didactics.speakingPrompts || [],
practicalTasks: didactics.practicalTasks || []
learningGoals: normalizedDidactics.learningGoals || [],
corePatterns: normalizedDidactics.corePatterns || [],
grammarFocus: normalizedDidactics.grammarFocus || [],
speakingPrompts: normalizedDidactics.speakingPrompts || [],
practicalTasks: normalizedDidactics.practicalTasks || [],
didacticMode: pedagogy?.didacticMode || null,
phaseLabel: pedagogy?.phaseLabel || null,
blockNumber: pedagogy?.blockNumber ?? null,
difficultyWeight: pedagogy?.difficultyWeight ?? null,
newUnitTarget: pedagogy?.newUnitTarget ?? null,
reviewWeight: pedagogy?.reviewWeight ?? null,
isIntensiveReview: Boolean(pedagogy?.isIntensiveReview)
});
updatedLessons++;
}