40274-vm/backend/src/db/migrations/1781682213083.js
2026-06-17 07:44:24 +00:00

4469 lines
144 KiB
JavaScript

module.exports = {
/**
* @param {QueryInterface} queryInterface
* @param {Sequelize} Sequelize
* @returns {Promise<void>}
*/
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<void>}
*/
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;
}
}
};