migration conflicts respolved

This commit is contained in:
laxmanhalaki 2025-11-05 18:26:10 +05:30
parent 84bf6e3dfc
commit 31354f2825
2 changed files with 125 additions and 0 deletions

View File

@ -0,0 +1,115 @@
import { QueryInterface, DataTypes } from 'sequelize';
/**
* Migration: Create users table
* This must run FIRST before other tables that reference users
*/
export async function up(queryInterface: QueryInterface): Promise<void> {
// Create users table
await queryInterface.createTable('users', {
user_id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
field: 'user_id'
},
employee_id: {
type: DataTypes.STRING(50),
allowNull: true,
field: 'employee_id'
},
okta_sub: {
type: DataTypes.STRING(100),
allowNull: false,
unique: true,
field: 'okta_sub'
},
email: {
type: DataTypes.STRING(255),
allowNull: false,
unique: true,
field: 'email'
},
first_name: {
type: DataTypes.STRING(100),
allowNull: true,
field: 'first_name'
},
last_name: {
type: DataTypes.STRING(100),
allowNull: true,
field: 'last_name'
},
display_name: {
type: DataTypes.STRING(200),
allowNull: true,
field: 'display_name'
},
department: {
type: DataTypes.STRING(100),
allowNull: true
},
designation: {
type: DataTypes.STRING(100),
allowNull: true
},
phone: {
type: DataTypes.STRING(20),
allowNull: true
},
location: {
type: DataTypes.JSONB,
allowNull: true
},
is_active: {
type: DataTypes.BOOLEAN,
defaultValue: true,
field: 'is_active'
},
is_admin: {
type: DataTypes.BOOLEAN,
defaultValue: false,
field: 'is_admin'
},
last_login: {
type: DataTypes.DATE,
allowNull: true,
field: 'last_login'
},
created_at: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: DataTypes.NOW,
field: 'created_at'
},
updated_at: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: DataTypes.NOW,
field: 'updated_at'
}
});
// Create indexes
await queryInterface.addIndex('users', ['email'], {
name: 'users_email_idx',
unique: true
});
await queryInterface.addIndex('users', ['okta_sub'], {
name: 'users_okta_sub_idx',
unique: true
});
await queryInterface.addIndex('users', ['employee_id'], {
name: 'users_employee_id_idx'
});
console.log('✅ Created users table with indexes');
}
export async function down(queryInterface: QueryInterface): Promise<void> {
await queryInterface.dropTable('users');
console.log('✅ Dropped users table');
}

View File

@ -1,5 +1,6 @@
import { sequelize } from '../config/database'; import { sequelize } from '../config/database';
import { QueryInterface, QueryTypes } from 'sequelize'; import { QueryInterface, QueryTypes } from 'sequelize';
import * as m0 from '../migrations/2025103000-create-users';
import * as m1 from '../migrations/2025103001-create-workflow-requests'; import * as m1 from '../migrations/2025103001-create-workflow-requests';
import * as m2 from '../migrations/2025103002-create-approval-levels'; import * as m2 from '../migrations/2025103002-create-approval-levels';
import * as m3 from '../migrations/2025103003-create-participants'; import * as m3 from '../migrations/2025103003-create-participants';
@ -14,6 +15,7 @@ import * as m11 from '../migrations/20251104-create-kpi-views';
import * as m12 from '../migrations/20251104-create-holidays'; import * as m12 from '../migrations/20251104-create-holidays';
import * as m13 from '../migrations/20251104-create-admin-config'; import * as m13 from '../migrations/20251104-create-admin-config';
import * as m14 from '../migrations/20251105-add-skip-fields-to-approval-levels'; import * as m14 from '../migrations/20251105-add-skip-fields-to-approval-levels';
import * as m15 from '../migrations/2025110501-alter-tat-days-to-generated';
interface Migration { interface Migration {
name: string; name: string;
@ -21,7 +23,12 @@ interface Migration {
} }
// Define all migrations in order // Define all migrations in order
// IMPORTANT: Order matters! Dependencies must be created before tables that reference them
const migrations: Migration[] = [ const migrations: Migration[] = [
// 1. FIRST: Create base tables with no dependencies
{ name: '2025103000-create-users', module: m0 }, // ← MUST BE FIRST
// 2. Tables that depend on users
{ name: '2025103001-create-workflow-requests', module: m1 }, { name: '2025103001-create-workflow-requests', module: m1 },
{ name: '2025103002-create-approval-levels', module: m2 }, { name: '2025103002-create-approval-levels', module: m2 },
{ name: '2025103003-create-participants', module: m3 }, { name: '2025103003-create-participants', module: m3 },
@ -30,12 +37,15 @@ const migrations: Migration[] = [
{ name: '20251031_02_create_activities', module: m6 }, { name: '20251031_02_create_activities', module: m6 },
{ name: '20251031_03_create_work_notes', module: m7 }, { name: '20251031_03_create_work_notes', module: m7 },
{ name: '20251031_04_create_work_note_attachments', module: m8 }, { name: '20251031_04_create_work_note_attachments', module: m8 },
// 3. Table modifications and additional features
{ name: '20251104-add-tat-alert-fields', module: m9 }, { name: '20251104-add-tat-alert-fields', module: m9 },
{ name: '20251104-create-tat-alerts', module: m10 }, { name: '20251104-create-tat-alerts', module: m10 },
{ name: '20251104-create-kpi-views', module: m11 }, { name: '20251104-create-kpi-views', module: m11 },
{ name: '20251104-create-holidays', module: m12 }, { name: '20251104-create-holidays', module: m12 },
{ name: '20251104-create-admin-config', module: m13 }, { name: '20251104-create-admin-config', module: m13 },
{ name: '20251105-add-skip-fields-to-approval-levels', module: m14 }, { name: '20251105-add-skip-fields-to-approval-levels', module: m14 },
{ name: '2025110501-alter-tat-days-to-generated', module: m15 },
]; ];
/** /**