116 lines
2.5 KiB
TypeScript
116 lines
2.5 KiB
TypeScript
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'
|
|
});
|
|
|
|
// Users table created
|
|
}
|
|
|
|
export async function down(queryInterface: QueryInterface): Promise<void> {
|
|
await queryInterface.dropTable('users');
|
|
// Users table dropped
|
|
}
|
|
|