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.
155 lines
3.5 KiB
JavaScript
155 lines
3.5 KiB
JavaScript
import { Model, DataTypes } from 'sequelize';
|
|
import { sequelize } from '../../utils/sequelize.js';
|
|
|
|
class VocabCourseLesson extends Model {}
|
|
|
|
VocabCourseLesson.init({
|
|
id: {
|
|
type: DataTypes.INTEGER,
|
|
primaryKey: true,
|
|
autoIncrement: true
|
|
},
|
|
courseId: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: false,
|
|
field: 'course_id'
|
|
},
|
|
chapterId: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'chapter_id'
|
|
},
|
|
lessonNumber: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: false,
|
|
field: 'lesson_number'
|
|
},
|
|
title: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: false
|
|
},
|
|
description: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: true
|
|
},
|
|
weekNumber: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'week_number'
|
|
},
|
|
dayNumber: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'day_number'
|
|
},
|
|
lessonType: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: false,
|
|
defaultValue: 'vocab',
|
|
field: 'lesson_type'
|
|
},
|
|
didacticMode: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: true,
|
|
field: 'didactic_mode'
|
|
},
|
|
phaseLabel: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: true,
|
|
field: 'phase_label'
|
|
},
|
|
blockNumber: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'block_number'
|
|
},
|
|
difficultyWeight: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'difficulty_weight'
|
|
},
|
|
newUnitTarget: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'new_unit_target'
|
|
},
|
|
reviewWeight: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'review_weight'
|
|
},
|
|
isIntensiveReview: {
|
|
type: DataTypes.BOOLEAN,
|
|
allowNull: false,
|
|
defaultValue: false,
|
|
field: 'is_intensive_review'
|
|
},
|
|
audioUrl: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: true,
|
|
field: 'audio_url'
|
|
},
|
|
culturalNotes: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: true,
|
|
field: 'cultural_notes'
|
|
},
|
|
learningGoals: {
|
|
type: DataTypes.JSONB,
|
|
allowNull: true,
|
|
field: 'learning_goals'
|
|
},
|
|
corePatterns: {
|
|
type: DataTypes.JSONB,
|
|
allowNull: true,
|
|
field: 'core_patterns'
|
|
},
|
|
grammarFocus: {
|
|
type: DataTypes.JSONB,
|
|
allowNull: true,
|
|
field: 'grammar_focus'
|
|
},
|
|
speakingPrompts: {
|
|
type: DataTypes.JSONB,
|
|
allowNull: true,
|
|
field: 'speaking_prompts'
|
|
},
|
|
practicalTasks: {
|
|
type: DataTypes.JSONB,
|
|
allowNull: true,
|
|
field: 'practical_tasks'
|
|
},
|
|
targetMinutes: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'target_minutes'
|
|
},
|
|
targetScorePercent: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: false,
|
|
defaultValue: 80,
|
|
field: 'target_score_percent'
|
|
},
|
|
requiresReview: {
|
|
type: DataTypes.BOOLEAN,
|
|
allowNull: false,
|
|
defaultValue: false,
|
|
field: 'requires_review'
|
|
},
|
|
createdAt: {
|
|
type: DataTypes.DATE,
|
|
allowNull: false,
|
|
defaultValue: DataTypes.NOW,
|
|
field: 'created_at'
|
|
}
|
|
}, {
|
|
sequelize,
|
|
modelName: 'VocabCourseLesson',
|
|
tableName: 'vocab_course_lesson',
|
|
schema: 'community',
|
|
timestamps: false,
|
|
underscored: true
|
|
});
|
|
|
|
export default VocabCourseLesson;
|