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('students', { 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('case_records', { 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('counseling_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('session_notes', { 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('referrals', { 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('report_runs', { 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('audit_logs', { 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( 'students', 'student_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'first_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'middle_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'last_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'sex', { type: Sequelize.DataTypes.ENUM, values: ['female','male','prefer_not_to_say'], }, { transaction } ); await queryInterface.addColumn( 'students', 'birth_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'students', 'grade_level', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'section', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'contact_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'address', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'guardian_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'guardian_contact', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'students', 'status', { type: Sequelize.DataTypes.ENUM, values: ['active','inactive','transferred','graduated'], }, { transaction } ); await queryInterface.addColumn( 'students', 'enrollment_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'students', 'confidential_remarks', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'studentId', { type: Sequelize.DataTypes.UUID, references: { model: 'students', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'case_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'case_type', { type: Sequelize.DataTypes.ENUM, values: ['academic','behavioral','career','social','family','mental_health','attendance','other'], }, { transaction } ); await queryInterface.addColumn( 'case_records', 'priority', { type: Sequelize.DataTypes.ENUM, values: ['low','medium','high','urgent'], }, { transaction } ); await queryInterface.addColumn( 'case_records', 'status', { type: Sequelize.DataTypes.ENUM, values: ['open','in_progress','on_hold','closed'], }, { transaction } ); await queryInterface.addColumn( 'case_records', 'presenting_concern', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'background_summary', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'goals', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'intervention_plan', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'opened_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'closed_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'case_records', 'assigned_counselorId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'case_recordId', { type: Sequelize.DataTypes.UUID, references: { model: 'case_records', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'studentId', { type: Sequelize.DataTypes.UUID, references: { model: 'students', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'counselorId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'scheduled_start_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'scheduled_end_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'actual_start_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'actual_end_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'session_type', { type: Sequelize.DataTypes.ENUM, values: ['individual','group','parent_guardian','teacher_referral','walk_in','other'], }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'mode', { type: Sequelize.DataTypes.ENUM, values: ['in_person','phone','other'], }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'location', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'outcome', { type: Sequelize.DataTypes.ENUM, values: ['information_provided','follow_up_required','referral_made','case_closed','other'], }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'summary', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'action_items', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'follow_up_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'counseling_sessions', 'is_confidential', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'session_notes', 'counseling_sessionId', { type: Sequelize.DataTypes.UUID, references: { model: 'counseling_sessions', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'session_notes', 'note_type', { type: Sequelize.DataTypes.ENUM, values: ['progress_note','intake','assessment','plan','follow_up','incident','other'], }, { transaction } ); await queryInterface.addColumn( 'session_notes', 'subject', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'session_notes', 'note_text', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'session_notes', 'is_locked', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'session_notes', 'recorded_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'session_notes', 'recorded_byId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'referrals', 'studentId', { type: Sequelize.DataTypes.UUID, references: { model: 'students', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'referrals', 'case_recordId', { type: Sequelize.DataTypes.UUID, references: { model: 'case_records', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'referrals', 'referred_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'referrals', 'referral_source', { type: Sequelize.DataTypes.ENUM, values: ['self','teacher','parent_guardian','administrator','peer','other'], }, { transaction } ); await queryInterface.addColumn( 'referrals', 'source_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'referrals', 'referral_reason', { type: Sequelize.DataTypes.ENUM, values: ['academic','behavioral','attendance','mental_health','career','family','other'], }, { transaction } ); await queryInterface.addColumn( 'referrals', 'details', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'referrals', 'urgency', { type: Sequelize.DataTypes.ENUM, values: ['routine','soon','immediate'], }, { transaction } ); await queryInterface.addColumn( 'referrals', 'received_byId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'report_runs', 'report_type', { type: Sequelize.DataTypes.ENUM, values: ['case_summary','student_case_history','sessions_by_date_range','open_cases','closed_cases','referrals_summary'], }, { transaction } ); await queryInterface.addColumn( 'report_runs', 'studentId', { type: Sequelize.DataTypes.UUID, references: { model: 'students', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'report_runs', 'case_recordId', { type: Sequelize.DataTypes.UUID, references: { model: 'case_records', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'report_runs', 'range_start_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'report_runs', 'range_end_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'report_runs', 'generated_title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'report_runs', 'generated_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'report_runs', 'generated_byId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'audit_logs', 'event_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'audit_logs', 'userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'audit_logs', 'action', { type: Sequelize.DataTypes.ENUM, values: ['create','update','delete','view','print','export','login','logout'], }, { transaction } ); await queryInterface.addColumn( 'audit_logs', 'entity_name', { type: Sequelize.DataTypes.ENUM, values: ['students','case_records','counseling_sessions','session_notes','referrals','report_runs','users'], }, { transaction } ); await queryInterface.addColumn( 'audit_logs', 'record_key', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'audit_logs', 'details', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'audit_logs', 'is_sensitive', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { 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( 'audit_logs', 'is_sensitive', { transaction } ); await queryInterface.removeColumn( 'audit_logs', 'details', { transaction } ); await queryInterface.removeColumn( 'audit_logs', 'record_key', { transaction } ); await queryInterface.removeColumn( 'audit_logs', 'entity_name', { transaction } ); await queryInterface.removeColumn( 'audit_logs', 'action', { transaction } ); await queryInterface.removeColumn( 'audit_logs', 'userId', { transaction } ); await queryInterface.removeColumn( 'audit_logs', 'event_at', { transaction } ); await queryInterface.removeColumn( 'report_runs', 'generated_byId', { transaction } ); await queryInterface.removeColumn( 'report_runs', 'generated_at', { transaction } ); await queryInterface.removeColumn( 'report_runs', 'generated_title', { transaction } ); await queryInterface.removeColumn( 'report_runs', 'range_end_at', { transaction } ); await queryInterface.removeColumn( 'report_runs', 'range_start_at', { transaction } ); await queryInterface.removeColumn( 'report_runs', 'case_recordId', { transaction } ); await queryInterface.removeColumn( 'report_runs', 'studentId', { transaction } ); await queryInterface.removeColumn( 'report_runs', 'report_type', { transaction } ); await queryInterface.removeColumn( 'referrals', 'received_byId', { transaction } ); await queryInterface.removeColumn( 'referrals', 'urgency', { transaction } ); await queryInterface.removeColumn( 'referrals', 'details', { transaction } ); await queryInterface.removeColumn( 'referrals', 'referral_reason', { transaction } ); await queryInterface.removeColumn( 'referrals', 'source_name', { transaction } ); await queryInterface.removeColumn( 'referrals', 'referral_source', { transaction } ); await queryInterface.removeColumn( 'referrals', 'referred_at', { transaction } ); await queryInterface.removeColumn( 'referrals', 'case_recordId', { transaction } ); await queryInterface.removeColumn( 'referrals', 'studentId', { transaction } ); await queryInterface.removeColumn( 'session_notes', 'recorded_byId', { transaction } ); await queryInterface.removeColumn( 'session_notes', 'recorded_at', { transaction } ); await queryInterface.removeColumn( 'session_notes', 'is_locked', { transaction } ); await queryInterface.removeColumn( 'session_notes', 'note_text', { transaction } ); await queryInterface.removeColumn( 'session_notes', 'subject', { transaction } ); await queryInterface.removeColumn( 'session_notes', 'note_type', { transaction } ); await queryInterface.removeColumn( 'session_notes', 'counseling_sessionId', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'is_confidential', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'follow_up_at', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'action_items', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'summary', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'outcome', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'location', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'mode', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'session_type', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'actual_end_at', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'actual_start_at', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'scheduled_end_at', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'scheduled_start_at', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'counselorId', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'studentId', { transaction } ); await queryInterface.removeColumn( 'counseling_sessions', 'case_recordId', { transaction } ); await queryInterface.removeColumn( 'case_records', 'assigned_counselorId', { transaction } ); await queryInterface.removeColumn( 'case_records', 'closed_at', { transaction } ); await queryInterface.removeColumn( 'case_records', 'opened_at', { transaction } ); await queryInterface.removeColumn( 'case_records', 'intervention_plan', { transaction } ); await queryInterface.removeColumn( 'case_records', 'goals', { transaction } ); await queryInterface.removeColumn( 'case_records', 'background_summary', { transaction } ); await queryInterface.removeColumn( 'case_records', 'presenting_concern', { transaction } ); await queryInterface.removeColumn( 'case_records', 'status', { transaction } ); await queryInterface.removeColumn( 'case_records', 'priority', { transaction } ); await queryInterface.removeColumn( 'case_records', 'case_type', { transaction } ); await queryInterface.removeColumn( 'case_records', 'case_code', { transaction } ); await queryInterface.removeColumn( 'case_records', 'studentId', { transaction } ); await queryInterface.removeColumn( 'students', 'confidential_remarks', { transaction } ); await queryInterface.removeColumn( 'students', 'enrollment_date', { transaction } ); await queryInterface.removeColumn( 'students', 'status', { transaction } ); await queryInterface.removeColumn( 'students', 'guardian_contact', { transaction } ); await queryInterface.removeColumn( 'students', 'guardian_name', { transaction } ); await queryInterface.removeColumn( 'students', 'address', { transaction } ); await queryInterface.removeColumn( 'students', 'email', { transaction } ); await queryInterface.removeColumn( 'students', 'contact_number', { transaction } ); await queryInterface.removeColumn( 'students', 'section', { transaction } ); await queryInterface.removeColumn( 'students', 'grade_level', { transaction } ); await queryInterface.removeColumn( 'students', 'birth_date', { transaction } ); await queryInterface.removeColumn( 'students', 'sex', { transaction } ); await queryInterface.removeColumn( 'students', 'last_name', { transaction } ); await queryInterface.removeColumn( 'students', 'middle_name', { transaction } ); await queryInterface.removeColumn( 'students', 'first_name', { transaction } ); await queryInterface.removeColumn( 'students', 'student_number', { 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('audit_logs', { transaction }); await queryInterface.dropTable('report_runs', { transaction }); await queryInterface.dropTable('referrals', { transaction }); await queryInterface.dropTable('session_notes', { transaction }); await queryInterface.dropTable('counseling_sessions', { transaction }); await queryInterface.dropTable('case_records', { transaction }); await queryInterface.dropTable('students', { 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; } } };