module.exports = { /** * @param {QueryInterface} queryInterface * @param {Sequelize} Sequelize * @returns {Promise} */ async up(queryInterface, Sequelize) { /** * @type {Transaction} */ const transaction = await queryInterface.sequelize.transaction(); try { await queryInterface.createTable('users', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('roles', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('permissions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('quiz_templates', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('quiz_questions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('question_choices', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('quiz_attempts', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('quiz_answers', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('measurement_sessions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('player_profiles', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('profile_skill_tags', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('skill_moves', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('workout_plans', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('workout_exercises', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('diet_plans', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('diet_meals', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('nel_teams', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('monthly_training_calendars', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('daily_challenges', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('challenge_completions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('soccer_rules', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('soccer_terms', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('mental_health_resources', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('compatibility_results', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.addColumn( 'users', 'firstName', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'lastName', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'phoneNumber', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'disabled', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'users', 'password', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'emailVerified', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'users', 'emailVerificationToken', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'emailVerificationTokenExpiresAt', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'users', 'passwordResetToken', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'passwordResetTokenExpiresAt', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'users', 'provider', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'app_roleId', { type: Sequelize.DataTypes.UUID, references: { model: 'roles', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'roles', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'roles', 'role_customization', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'permissions', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'quiz_templates', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'quiz_templates', 'mode', { type: Sequelize.DataTypes.ENUM, values: ['real_life','blue_lock'], }, { transaction } ); await queryInterface.addColumn( 'quiz_templates', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'quiz_templates', 'is_active', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'quiz_templateId', { type: Sequelize.DataTypes.UUID, references: { model: 'quiz_templates', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'section', { type: Sequelize.DataTypes.ENUM, values: ['physical','technical','personal'], }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'prompt', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'answer_type', { type: Sequelize.DataTypes.ENUM, values: ['number','single_choice','multi_choice','text'], }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'order_index', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'page_group', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'min_value', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'max_value', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'quiz_questions', 'weight', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'question_choices', 'quiz_questionId', { type: Sequelize.DataTypes.UUID, references: { model: 'quiz_questions', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'question_choices', 'label', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'question_choices', 'score_value', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'question_choices', 'order_index', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'quiz_attempts', 'userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quiz_attempts', 'quiz_templateId', { type: Sequelize.DataTypes.UUID, references: { model: 'quiz_templates', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quiz_attempts', 'path_choice', { type: Sequelize.DataTypes.ENUM, values: ['real_life','blue_lock'], }, { transaction } ); await queryInterface.addColumn( 'quiz_attempts', 'nel_teamId', { type: Sequelize.DataTypes.UUID, references: { model: 'nel_teams', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quiz_attempts', 'started_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'quiz_attempts', 'completed_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'quiz_attempts', 'overall_score', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'quiz_answers', 'quiz_attemptId', { type: Sequelize.DataTypes.UUID, references: { model: 'quiz_attempts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quiz_answers', 'quiz_questionId', { type: Sequelize.DataTypes.UUID, references: { model: 'quiz_questions', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quiz_answers', 'number_value', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'quiz_answers', 'text_value', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'measurement_sessions', 'quiz_attemptId', { type: Sequelize.DataTypes.UUID, references: { model: 'quiz_attempts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'measurement_sessions', 'measurement_type', { type: Sequelize.DataTypes.ENUM, values: ['height','vertical_jump','sprint_time'], }, { transaction } ); await queryInterface.addColumn( 'measurement_sessions', 'method', { type: Sequelize.DataTypes.ENUM, values: ['manual','camera'], }, { transaction } ); await queryInterface.addColumn( 'measurement_sessions', 'value', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'measurement_sessions', 'unit', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'measurement_sessions', 'distance_meters', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'measurement_sessions', 'measured_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'measurement_sessions', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'player_profiles', 'profile_type', { type: Sequelize.DataTypes.ENUM, values: ['pro_player','blue_lock_character'], }, { transaction } ); await queryInterface.addColumn( 'player_profiles', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'player_profiles', 'nickname', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'player_profiles', 'status', { type: Sequelize.DataTypes.ENUM, values: ['living','icon','fictional'], }, { transaction } ); await queryInterface.addColumn( 'player_profiles', 'primary_style', { type: Sequelize.DataTypes.ENUM, values: ['dribbler','finisher','playmaker','box_to_box','defender','goalkeeper','pacey_winger','target_forward'], }, { transaction } ); await queryInterface.addColumn( 'player_profiles', 'bio', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'player_profiles', 'nel_teamId', { type: Sequelize.DataTypes.UUID, references: { model: 'nel_teams', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'profile_skill_tags', 'player_profileId', { type: Sequelize.DataTypes.UUID, references: { model: 'player_profiles', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'profile_skill_tags', 'category', { type: Sequelize.DataTypes.ENUM, values: ['skill_move','dribbling_technique','shooting_technique','defending_technique','mental_skill','game_iq'], }, { transaction } ); await queryInterface.addColumn( 'profile_skill_tags', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'profile_skill_tags', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'profile_skill_tags', 'importance_rank', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'skill_moves', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'skill_moves', 'star_level', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'skill_moves', 'difficulty', { type: Sequelize.DataTypes.ENUM, values: ['beginner','intermediate','advanced','elite'], }, { transaction } ); await queryInterface.addColumn( 'skill_moves', 'short_summary', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'skill_moves', 'tutorial', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'skill_moves', 'dominant_foot', { type: Sequelize.DataTypes.ENUM, values: ['either','left','right'], }, { transaction } ); await queryInterface.addColumn( 'workout_plans', 'plan_type', { type: Sequelize.DataTypes.ENUM, values: ['real_life_build','blue_lock_team_monthly'], }, { transaction } ); await queryInterface.addColumn( 'workout_plans', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'workout_plans', 'goal', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'workout_plans', 'focus_area', { type: Sequelize.DataTypes.ENUM, values: ['physical','pace_speed','finishing','dribbling_creativity','offense_defense_balance','improvisation','team_strategy_discipline'], }, { transaction } ); await queryInterface.addColumn( 'workout_plans', 'nel_teamId', { type: Sequelize.DataTypes.UUID, references: { model: 'nel_teams', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'workout_plans', 'ball_required', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'workout_planId', { type: Sequelize.DataTypes.UUID, references: { model: 'workout_plans', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'equipment_level', { type: Sequelize.DataTypes.ENUM, values: ['none','ball_only'], }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'instructions', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'sets', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'reps', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'duration_seconds', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'rest_seconds', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'workout_exercises', 'order_index', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'diet_plans', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'diet_plans', 'goal', { type: Sequelize.DataTypes.ENUM, values: ['lean_bulk','fat_loss','maintenance','performance'], }, { transaction } ); await queryInterface.addColumn( 'diet_plans', 'overview', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'diet_plans', 'daily_calorie_target', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'diet_plans', 'protein_grams', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'diet_plans', 'carbs_grams', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'diet_plans', 'fat_grams', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'diet_planId', { type: Sequelize.DataTypes.UUID, references: { model: 'diet_plans', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'meal_type', { type: Sequelize.DataTypes.ENUM, values: ['breakfast','lunch','dinner','snack'], }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'calories', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'protein_grams', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'carbs_grams', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'fat_grams', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'diet_meals', 'order_index', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'nel_teams', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'nel_teams', 'code', { type: Sequelize.DataTypes.ENUM, values: ['manshine_city','ubers','fc_barcha','pxg','bastard_munchen'], }, { transaction } ); await queryInterface.addColumn( 'nel_teams', 'philosophy', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'nel_teams', 'training_focus', { type: Sequelize.DataTypes.ENUM, values: ['physical_power','offense_defense_balance','dribbling_creativity','improvisation','team_strategy_discipline'], }, { transaction } ); await queryInterface.addColumn( 'monthly_training_calendars', 'userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'monthly_training_calendars', 'path_choice', { type: Sequelize.DataTypes.ENUM, values: ['real_life','blue_lock'], }, { transaction } ); await queryInterface.addColumn( 'monthly_training_calendars', 'nel_teamId', { type: Sequelize.DataTypes.UUID, references: { model: 'nel_teams', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'monthly_training_calendars', 'month_start_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'monthly_training_calendars', 'month_end_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'monthly_training_calendars', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'daily_challenges', 'monthly_training_calendarId', { type: Sequelize.DataTypes.UUID, references: { model: 'monthly_training_calendars', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'daily_challenges', 'challenge_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'daily_challenges', 'challenge_kind', { type: Sequelize.DataTypes.ENUM, values: ['mini_quest','main_quest'], }, { transaction } ); await queryInterface.addColumn( 'daily_challenges', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'daily_challenges', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'daily_challenges', 'target_count', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'daily_challenges', 'target_unit', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'daily_challenges', 'resets_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'challenge_completions', 'daily_challengeId', { type: Sequelize.DataTypes.UUID, references: { model: 'daily_challenges', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'challenge_completions', 'userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'challenge_completions', 'status', { type: Sequelize.DataTypes.ENUM, values: ['not_started','in_progress','completed','skipped'], }, { transaction } ); await queryInterface.addColumn( 'challenge_completions', 'completed_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'challenge_completions', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'soccer_rules', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'soccer_rules', 'category', { type: Sequelize.DataTypes.ENUM, values: ['laws_of_the_game','offside','fouls_misconduct','set_pieces','var','positions_tactics','goalkeeper_rules'], }, { transaction } ); await queryInterface.addColumn( 'soccer_rules', 'summary', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'soccer_rules', 'content', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'soccer_rules', 'is_featured', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'soccer_terms', 'term', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'soccer_terms', 'language', { type: Sequelize.DataTypes.ENUM, values: ['en','es','fr','de','pt','it','nl','tr','ar','hi','ja','ko','zh'], }, { transaction } ); await queryInterface.addColumn( 'soccer_terms', 'pronunciation', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'soccer_terms', 'definition', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'soccer_terms', 'example_phrase', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'soccer_terms', 'difficulty_level', { type: Sequelize.DataTypes.ENUM, values: ['basic','intermediate','advanced'], }, { transaction } ); await queryInterface.addColumn( 'mental_health_resources', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'mental_health_resources', 'resource_type', { type: Sequelize.DataTypes.ENUM, values: ['breathing','mindset','confidence','stress','sleep','injury_coping','motivation','help_seeking'], }, { transaction } ); await queryInterface.addColumn( 'mental_health_resources', 'content', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'mental_health_resources', 'is_emergency_notice', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'compatibility_results', 'quiz_attemptId', { type: Sequelize.DataTypes.UUID, references: { model: 'quiz_attempts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'compatibility_results', 'matched_profileId', { type: Sequelize.DataTypes.UUID, references: { model: 'player_profiles', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'compatibility_results', 'match_percent', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'compatibility_results', 'summary', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'compatibility_results', 'recommended_workout_planId', { type: Sequelize.DataTypes.UUID, references: { model: 'workout_plans', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'compatibility_results', 'recommended_diet_planId', { type: Sequelize.DataTypes.UUID, references: { model: 'diet_plans', key: 'id', }, }, { transaction } ); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } }, /** * @param {QueryInterface} queryInterface * @param {Sequelize} Sequelize * @returns {Promise} */ async down(queryInterface, Sequelize) { /** * @type {Transaction} */ const transaction = await queryInterface.sequelize.transaction(); try { await queryInterface.removeColumn( 'compatibility_results', 'recommended_diet_planId', { transaction } ); await queryInterface.removeColumn( 'compatibility_results', 'recommended_workout_planId', { transaction } ); await queryInterface.removeColumn( 'compatibility_results', 'summary', { transaction } ); await queryInterface.removeColumn( 'compatibility_results', 'match_percent', { transaction } ); await queryInterface.removeColumn( 'compatibility_results', 'matched_profileId', { transaction } ); await queryInterface.removeColumn( 'compatibility_results', 'quiz_attemptId', { transaction } ); await queryInterface.removeColumn( 'mental_health_resources', 'is_emergency_notice', { transaction } ); await queryInterface.removeColumn( 'mental_health_resources', 'content', { transaction } ); await queryInterface.removeColumn( 'mental_health_resources', 'resource_type', { transaction } ); await queryInterface.removeColumn( 'mental_health_resources', 'title', { transaction } ); await queryInterface.removeColumn( 'soccer_terms', 'difficulty_level', { transaction } ); await queryInterface.removeColumn( 'soccer_terms', 'example_phrase', { transaction } ); await queryInterface.removeColumn( 'soccer_terms', 'definition', { transaction } ); await queryInterface.removeColumn( 'soccer_terms', 'pronunciation', { transaction } ); await queryInterface.removeColumn( 'soccer_terms', 'language', { transaction } ); await queryInterface.removeColumn( 'soccer_terms', 'term', { transaction } ); await queryInterface.removeColumn( 'soccer_rules', 'is_featured', { transaction } ); await queryInterface.removeColumn( 'soccer_rules', 'content', { transaction } ); await queryInterface.removeColumn( 'soccer_rules', 'summary', { transaction } ); await queryInterface.removeColumn( 'soccer_rules', 'category', { transaction } ); await queryInterface.removeColumn( 'soccer_rules', 'title', { transaction } ); await queryInterface.removeColumn( 'challenge_completions', 'notes', { transaction } ); await queryInterface.removeColumn( 'challenge_completions', 'completed_at', { transaction } ); await queryInterface.removeColumn( 'challenge_completions', 'status', { transaction } ); await queryInterface.removeColumn( 'challenge_completions', 'userId', { transaction } ); await queryInterface.removeColumn( 'challenge_completions', 'daily_challengeId', { transaction } ); await queryInterface.removeColumn( 'daily_challenges', 'resets_at', { transaction } ); await queryInterface.removeColumn( 'daily_challenges', 'target_unit', { transaction } ); await queryInterface.removeColumn( 'daily_challenges', 'target_count', { transaction } ); await queryInterface.removeColumn( 'daily_challenges', 'description', { transaction } ); await queryInterface.removeColumn( 'daily_challenges', 'title', { transaction } ); await queryInterface.removeColumn( 'daily_challenges', 'challenge_kind', { transaction } ); await queryInterface.removeColumn( 'daily_challenges', 'challenge_date', { transaction } ); await queryInterface.removeColumn( 'daily_challenges', 'monthly_training_calendarId', { transaction } ); await queryInterface.removeColumn( 'monthly_training_calendars', 'title', { transaction } ); await queryInterface.removeColumn( 'monthly_training_calendars', 'month_end_at', { transaction } ); await queryInterface.removeColumn( 'monthly_training_calendars', 'month_start_at', { transaction } ); await queryInterface.removeColumn( 'monthly_training_calendars', 'nel_teamId', { transaction } ); await queryInterface.removeColumn( 'monthly_training_calendars', 'path_choice', { transaction } ); await queryInterface.removeColumn( 'monthly_training_calendars', 'userId', { transaction } ); await queryInterface.removeColumn( 'nel_teams', 'training_focus', { transaction } ); await queryInterface.removeColumn( 'nel_teams', 'philosophy', { transaction } ); await queryInterface.removeColumn( 'nel_teams', 'code', { transaction } ); await queryInterface.removeColumn( 'nel_teams', 'name', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'order_index', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'fat_grams', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'carbs_grams', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'protein_grams', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'calories', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'description', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'name', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'meal_type', { transaction } ); await queryInterface.removeColumn( 'diet_meals', 'diet_planId', { transaction } ); await queryInterface.removeColumn( 'diet_plans', 'fat_grams', { transaction } ); await queryInterface.removeColumn( 'diet_plans', 'carbs_grams', { transaction } ); await queryInterface.removeColumn( 'diet_plans', 'protein_grams', { transaction } ); await queryInterface.removeColumn( 'diet_plans', 'daily_calorie_target', { transaction } ); await queryInterface.removeColumn( 'diet_plans', 'overview', { transaction } ); await queryInterface.removeColumn( 'diet_plans', 'goal', { transaction } ); await queryInterface.removeColumn( 'diet_plans', 'title', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'order_index', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'rest_seconds', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'duration_seconds', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'reps', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'sets', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'instructions', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'equipment_level', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'name', { transaction } ); await queryInterface.removeColumn( 'workout_exercises', 'workout_planId', { transaction } ); await queryInterface.removeColumn( 'workout_plans', 'ball_required', { transaction } ); await queryInterface.removeColumn( 'workout_plans', 'nel_teamId', { transaction } ); await queryInterface.removeColumn( 'workout_plans', 'focus_area', { transaction } ); await queryInterface.removeColumn( 'workout_plans', 'goal', { transaction } ); await queryInterface.removeColumn( 'workout_plans', 'title', { transaction } ); await queryInterface.removeColumn( 'workout_plans', 'plan_type', { transaction } ); await queryInterface.removeColumn( 'skill_moves', 'dominant_foot', { transaction } ); await queryInterface.removeColumn( 'skill_moves', 'tutorial', { transaction } ); await queryInterface.removeColumn( 'skill_moves', 'short_summary', { transaction } ); await queryInterface.removeColumn( 'skill_moves', 'difficulty', { transaction } ); await queryInterface.removeColumn( 'skill_moves', 'star_level', { transaction } ); await queryInterface.removeColumn( 'skill_moves', 'name', { transaction } ); await queryInterface.removeColumn( 'profile_skill_tags', 'importance_rank', { transaction } ); await queryInterface.removeColumn( 'profile_skill_tags', 'description', { transaction } ); await queryInterface.removeColumn( 'profile_skill_tags', 'title', { transaction } ); await queryInterface.removeColumn( 'profile_skill_tags', 'category', { transaction } ); await queryInterface.removeColumn( 'profile_skill_tags', 'player_profileId', { transaction } ); await queryInterface.removeColumn( 'player_profiles', 'nel_teamId', { transaction } ); await queryInterface.removeColumn( 'player_profiles', 'bio', { transaction } ); await queryInterface.removeColumn( 'player_profiles', 'primary_style', { transaction } ); await queryInterface.removeColumn( 'player_profiles', 'status', { transaction } ); await queryInterface.removeColumn( 'player_profiles', 'nickname', { transaction } ); await queryInterface.removeColumn( 'player_profiles', 'name', { transaction } ); await queryInterface.removeColumn( 'player_profiles', 'profile_type', { transaction } ); await queryInterface.removeColumn( 'measurement_sessions', 'notes', { transaction } ); await queryInterface.removeColumn( 'measurement_sessions', 'measured_at', { transaction } ); await queryInterface.removeColumn( 'measurement_sessions', 'distance_meters', { transaction } ); await queryInterface.removeColumn( 'measurement_sessions', 'unit', { transaction } ); await queryInterface.removeColumn( 'measurement_sessions', 'value', { transaction } ); await queryInterface.removeColumn( 'measurement_sessions', 'method', { transaction } ); await queryInterface.removeColumn( 'measurement_sessions', 'measurement_type', { transaction } ); await queryInterface.removeColumn( 'measurement_sessions', 'quiz_attemptId', { transaction } ); await queryInterface.removeColumn( 'quiz_answers', 'text_value', { transaction } ); await queryInterface.removeColumn( 'quiz_answers', 'number_value', { transaction } ); await queryInterface.removeColumn( 'quiz_answers', 'quiz_questionId', { transaction } ); await queryInterface.removeColumn( 'quiz_answers', 'quiz_attemptId', { transaction } ); await queryInterface.removeColumn( 'quiz_attempts', 'overall_score', { transaction } ); await queryInterface.removeColumn( 'quiz_attempts', 'completed_at', { transaction } ); await queryInterface.removeColumn( 'quiz_attempts', 'started_at', { transaction } ); await queryInterface.removeColumn( 'quiz_attempts', 'nel_teamId', { transaction } ); await queryInterface.removeColumn( 'quiz_attempts', 'path_choice', { transaction } ); await queryInterface.removeColumn( 'quiz_attempts', 'quiz_templateId', { transaction } ); await queryInterface.removeColumn( 'quiz_attempts', 'userId', { transaction } ); await queryInterface.removeColumn( 'question_choices', 'order_index', { transaction } ); await queryInterface.removeColumn( 'question_choices', 'score_value', { transaction } ); await queryInterface.removeColumn( 'question_choices', 'label', { transaction } ); await queryInterface.removeColumn( 'question_choices', 'quiz_questionId', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'weight', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'max_value', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'min_value', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'page_group', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'order_index', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'answer_type', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'prompt', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'section', { transaction } ); await queryInterface.removeColumn( 'quiz_questions', 'quiz_templateId', { transaction } ); await queryInterface.removeColumn( 'quiz_templates', 'is_active', { transaction } ); await queryInterface.removeColumn( 'quiz_templates', 'description', { transaction } ); await queryInterface.removeColumn( 'quiz_templates', 'mode', { transaction } ); await queryInterface.removeColumn( 'quiz_templates', 'title', { transaction } ); await queryInterface.removeColumn( 'permissions', 'name', { transaction } ); await queryInterface.removeColumn( 'roles', 'role_customization', { transaction } ); await queryInterface.removeColumn( 'roles', 'name', { transaction } ); await queryInterface.removeColumn( 'users', 'app_roleId', { transaction } ); await queryInterface.removeColumn( 'users', 'provider', { transaction } ); await queryInterface.removeColumn( 'users', 'passwordResetTokenExpiresAt', { transaction } ); await queryInterface.removeColumn( 'users', 'passwordResetToken', { transaction } ); await queryInterface.removeColumn( 'users', 'emailVerificationTokenExpiresAt', { transaction } ); await queryInterface.removeColumn( 'users', 'emailVerificationToken', { transaction } ); await queryInterface.removeColumn( 'users', 'emailVerified', { transaction } ); await queryInterface.removeColumn( 'users', 'password', { transaction } ); await queryInterface.removeColumn( 'users', 'disabled', { transaction } ); await queryInterface.removeColumn( 'users', 'email', { transaction } ); await queryInterface.removeColumn( 'users', 'phoneNumber', { transaction } ); await queryInterface.removeColumn( 'users', 'lastName', { transaction } ); await queryInterface.removeColumn( 'users', 'firstName', { transaction } ); await queryInterface.dropTable('compatibility_results', { transaction }); await queryInterface.dropTable('mental_health_resources', { transaction }); await queryInterface.dropTable('soccer_terms', { transaction }); await queryInterface.dropTable('soccer_rules', { transaction }); await queryInterface.dropTable('challenge_completions', { transaction }); await queryInterface.dropTable('daily_challenges', { transaction }); await queryInterface.dropTable('monthly_training_calendars', { transaction }); await queryInterface.dropTable('nel_teams', { transaction }); await queryInterface.dropTable('diet_meals', { transaction }); await queryInterface.dropTable('diet_plans', { transaction }); await queryInterface.dropTable('workout_exercises', { transaction }); await queryInterface.dropTable('workout_plans', { transaction }); await queryInterface.dropTable('skill_moves', { transaction }); await queryInterface.dropTable('profile_skill_tags', { transaction }); await queryInterface.dropTable('player_profiles', { transaction }); await queryInterface.dropTable('measurement_sessions', { transaction }); await queryInterface.dropTable('quiz_answers', { transaction }); await queryInterface.dropTable('quiz_attempts', { transaction }); await queryInterface.dropTable('question_choices', { transaction }); await queryInterface.dropTable('quiz_questions', { transaction }); await queryInterface.dropTable('quiz_templates', { transaction }); await queryInterface.dropTable('permissions', { transaction }); await queryInterface.dropTable('roles', { transaction }); await queryInterface.dropTable('users', { transaction }); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } } };