39265-vm/backend/src/db/migrations/1774186687013.js
2026-03-22 13:39:32 +00:00

2623 lines
82 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('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<void>}
*/
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;
}
}
};