34407/backend/src/db/migrations/1758865238752.js
2025-09-26 05:53:08 +00:00

3772 lines
86 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(
'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.createTable(
'data_connections',
{
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(
'fin_accounts',
{
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(
'fin_ap',
{
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(
'fin_ar',
{
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(
'fin_budgets',
{
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(
'fin_customers',
{
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(
'fin_forecasts',
{
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(
'fin_transactions',
{
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(
'fin_vendors',
{
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(
'hr_applicants',
{
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(
'hr_attendance',
{
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(
'hr_employees',
{
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(
'hr_payroll',
{
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(
'hr_positions',
{
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(
'hr_reqs',
{
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(
'ops_incidents',
{
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(
'ops_inventory',
{
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(
'ops_lines',
{
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(
'ops_orders',
{
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(
'ops_plants',
{
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(
'ops_production_log',
{
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(
'ops_shipments',
{
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(
'organizations',
{
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(
'audit_logs',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ 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.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'audit_logs',
'entity',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'audit_logs',
'entity_id',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'audit_logs',
'diff_json',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'data_connections',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'data_connections',
'type',
{
type: Sequelize.DataTypes.ENUM,
values: ['Snowflake', 'BigQuery', 'Redshift', 'Postgres'],
},
{ transaction },
);
await queryInterface.addColumn(
'data_connections',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'data_connections',
'config_json',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'data_connections',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['Active', 'Inactive'],
},
{ transaction },
);
await queryInterface.addColumn(
'data_connections',
'last_sync_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_accounts',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_accounts',
'code',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_accounts',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_accounts',
'type',
{
type: Sequelize.DataTypes.ENUM,
values: ['asset', 'liability', 'equity', 'revenue', 'expense'],
},
{ transaction },
);
await queryInterface.addColumn(
'fin_accounts',
'parentId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_accounts',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_accounts',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ap',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ap',
'bill_no',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ap',
'vendorId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_vendors',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ap',
'due_date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ap',
'amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ap',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['Pending', 'Paid', 'Overdue'],
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ar',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ar',
'invoice_no',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ar',
'customerId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_customers',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ar',
'due_date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ar',
'amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ar',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['Pending', 'Paid', 'Overdue'],
},
{ transaction },
);
await queryInterface.addColumn(
'fin_budgets',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_budgets',
'fiscal_year',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_budgets',
'cost_center',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_budgets',
'accountId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_accounts',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_budgets',
'month',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_budgets',
'amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_customers',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_customers',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_customers',
'segment',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_customers',
'country',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_forecasts',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_forecasts',
'fiscal_year',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_forecasts',
'cost_center',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_forecasts',
'accountId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_accounts',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_forecasts',
'month',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_forecasts',
'amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'accountId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_accounts',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'tx_ts',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'fx_rate',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'cost_center',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'project_code',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'vendorId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_vendors',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'customerId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_customers',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'memo',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'source',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_vendors',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_vendors',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_vendors',
'tax_id',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'fin_vendors',
'country',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_applicants',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_applicants',
'reqId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'hr_reqs',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_applicants',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_applicants',
'stage',
{
type: Sequelize.DataTypes.ENUM,
values: ['Applied', 'Interview', 'Offer', 'Hired'],
},
{ transaction },
);
await queryInterface.addColumn(
'hr_applicants',
'source',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_applicants',
'offer_extended_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_applicants',
'offer_accepted_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_attendance',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_attendance',
'employeeId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'hr_employees',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_attendance',
'date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_attendance',
'hours_worked',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_attendance',
'leave_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['Sick', 'Vacation', 'Unpaid'],
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'employee_no',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'email',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'managerId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'hr_employees',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'department',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'location',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'grade',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'hire_date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'termination_date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['Active', 'Inactive'],
},
{ transaction },
);
await queryInterface.addColumn(
'hr_payroll',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_payroll',
'employeeId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'hr_employees',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_payroll',
'period',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_payroll',
'base_pay',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_payroll',
'bonus',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_payroll',
'overtime_hours',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_payroll',
'currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_positions',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_positions',
'title',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_positions',
'department',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_positions',
'level',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_positions',
'location',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_positions',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['Open', 'Closed'],
},
{ transaction },
);
await queryInterface.addColumn(
'hr_reqs',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_reqs',
'positionId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'hr_positions',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_reqs',
'opened_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_reqs',
'filled_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_reqs',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['Open', 'Closed', 'OnHold'],
},
{ transaction },
);
await queryInterface.addColumn(
'hr_reqs',
'recruiter',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'hr_reqs',
'priority',
{
type: Sequelize.DataTypes.ENUM,
values: ['High', 'Medium', 'Low'],
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'plantId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'ops_plants',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'lineId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'ops_lines',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'occurred_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'category',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'severity',
{
type: Sequelize.DataTypes.ENUM,
values: ['Low', 'Medium', 'High'],
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'duration_min',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'root_cause',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_inventory',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_inventory',
'sku',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_inventory',
'location',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_inventory',
'on_hand',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_inventory',
'on_order',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_inventory',
'safety_stock',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_inventory',
'unit_cost',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_lines',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_lines',
'plantId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'ops_plants',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_lines',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_orders',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_orders',
'order_no',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_orders',
'customerId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'fin_customers',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_orders',
'due_date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_orders',
'qty',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_orders',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['Pending', 'Completed', 'Cancelled'],
},
{ transaction },
);
await queryInterface.addColumn(
'ops_plants',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_plants',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_plants',
'location',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_plants',
'timezone',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_production_log',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_production_log',
'lineId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'ops_lines',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_production_log',
'ts',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_production_log',
'units_produced',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_production_log',
'planned_units',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_production_log',
'downtime_min',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_production_log',
'defects',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_shipments',
'orgId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_shipments',
'order_no',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_shipments',
'shipped_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_shipments',
'carrier',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_shipments',
'delivered_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction },
);
await queryInterface.addColumn(
'ops_shipments',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['InTransit', 'Delivered', 'Delayed'],
},
{ transaction },
);
await queryInterface.addColumn(
'permissions',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ 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(
'users',
'app_roleId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'roles',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'organizations',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction },
);
await queryInterface.addColumn(
'roles',
'globalAccess',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction },
);
await queryInterface.addColumn(
'users',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'audit_logs',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'data_connections',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_accounts',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ap',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_ar',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_budgets',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_customers',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_forecasts',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_transactions',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'fin_vendors',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_applicants',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_attendance',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_employees',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_payroll',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_positions',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'hr_reqs',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_incidents',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_inventory',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_lines',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_orders',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_plants',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_production_log',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction },
);
await queryInterface.addColumn(
'ops_shipments',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
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('ops_shipments', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn(
'ops_production_log',
'organizationsId',
{ transaction },
);
await queryInterface.removeColumn('ops_plants', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('ops_orders', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('ops_lines', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('ops_inventory', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('hr_reqs', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('hr_positions', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('hr_payroll', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('hr_attendance', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('hr_applicants', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('fin_vendors', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('fin_forecasts', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('fin_customers', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('fin_budgets', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('fin_ar', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('fin_ap', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('fin_accounts', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('data_connections', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('audit_logs', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('users', 'organizationsId', {
transaction,
});
await queryInterface.removeColumn('roles', 'globalAccess', {
transaction,
});
await queryInterface.removeColumn('organizations', 'name', {
transaction,
});
await queryInterface.removeColumn('users', 'app_roleId', { transaction });
await queryInterface.removeColumn('roles', 'role_customization', {
transaction,
});
await queryInterface.removeColumn('roles', 'name', { transaction });
await queryInterface.removeColumn('permissions', 'name', { transaction });
await queryInterface.removeColumn('ops_shipments', 'status', {
transaction,
});
await queryInterface.removeColumn('ops_shipments', 'delivered_at', {
transaction,
});
await queryInterface.removeColumn('ops_shipments', 'carrier', {
transaction,
});
await queryInterface.removeColumn('ops_shipments', 'shipped_at', {
transaction,
});
await queryInterface.removeColumn('ops_shipments', 'order_no', {
transaction,
});
await queryInterface.removeColumn('ops_shipments', 'orgId', {
transaction,
});
await queryInterface.removeColumn('ops_production_log', 'defects', {
transaction,
});
await queryInterface.removeColumn('ops_production_log', 'downtime_min', {
transaction,
});
await queryInterface.removeColumn('ops_production_log', 'planned_units', {
transaction,
});
await queryInterface.removeColumn(
'ops_production_log',
'units_produced',
{ transaction },
);
await queryInterface.removeColumn('ops_production_log', 'ts', {
transaction,
});
await queryInterface.removeColumn('ops_production_log', 'lineId', {
transaction,
});
await queryInterface.removeColumn('ops_production_log', 'orgId', {
transaction,
});
await queryInterface.removeColumn('ops_plants', 'timezone', {
transaction,
});
await queryInterface.removeColumn('ops_plants', 'location', {
transaction,
});
await queryInterface.removeColumn('ops_plants', 'name', { transaction });
await queryInterface.removeColumn('ops_plants', 'orgId', { transaction });
await queryInterface.removeColumn('ops_orders', 'status', {
transaction,
});
await queryInterface.removeColumn('ops_orders', 'qty', { transaction });
await queryInterface.removeColumn('ops_orders', 'due_date', {
transaction,
});
await queryInterface.removeColumn('ops_orders', 'customerId', {
transaction,
});
await queryInterface.removeColumn('ops_orders', 'order_no', {
transaction,
});
await queryInterface.removeColumn('ops_orders', 'orgId', { transaction });
await queryInterface.removeColumn('ops_lines', 'name', { transaction });
await queryInterface.removeColumn('ops_lines', 'plantId', {
transaction,
});
await queryInterface.removeColumn('ops_lines', 'orgId', { transaction });
await queryInterface.removeColumn('ops_inventory', 'unit_cost', {
transaction,
});
await queryInterface.removeColumn('ops_inventory', 'safety_stock', {
transaction,
});
await queryInterface.removeColumn('ops_inventory', 'on_order', {
transaction,
});
await queryInterface.removeColumn('ops_inventory', 'on_hand', {
transaction,
});
await queryInterface.removeColumn('ops_inventory', 'location', {
transaction,
});
await queryInterface.removeColumn('ops_inventory', 'sku', {
transaction,
});
await queryInterface.removeColumn('ops_inventory', 'orgId', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'root_cause', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'duration_min', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'severity', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'category', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'occurred_at', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'lineId', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'plantId', {
transaction,
});
await queryInterface.removeColumn('ops_incidents', 'orgId', {
transaction,
});
await queryInterface.removeColumn('hr_reqs', 'priority', { transaction });
await queryInterface.removeColumn('hr_reqs', 'recruiter', {
transaction,
});
await queryInterface.removeColumn('hr_reqs', 'status', { transaction });
await queryInterface.removeColumn('hr_reqs', 'filled_at', {
transaction,
});
await queryInterface.removeColumn('hr_reqs', 'opened_at', {
transaction,
});
await queryInterface.removeColumn('hr_reqs', 'positionId', {
transaction,
});
await queryInterface.removeColumn('hr_reqs', 'orgId', { transaction });
await queryInterface.removeColumn('hr_positions', 'status', {
transaction,
});
await queryInterface.removeColumn('hr_positions', 'location', {
transaction,
});
await queryInterface.removeColumn('hr_positions', 'level', {
transaction,
});
await queryInterface.removeColumn('hr_positions', 'department', {
transaction,
});
await queryInterface.removeColumn('hr_positions', 'title', {
transaction,
});
await queryInterface.removeColumn('hr_positions', 'orgId', {
transaction,
});
await queryInterface.removeColumn('hr_payroll', 'currency', {
transaction,
});
await queryInterface.removeColumn('hr_payroll', 'overtime_hours', {
transaction,
});
await queryInterface.removeColumn('hr_payroll', 'bonus', { transaction });
await queryInterface.removeColumn('hr_payroll', 'base_pay', {
transaction,
});
await queryInterface.removeColumn('hr_payroll', 'period', {
transaction,
});
await queryInterface.removeColumn('hr_payroll', 'employeeId', {
transaction,
});
await queryInterface.removeColumn('hr_payroll', 'orgId', { transaction });
await queryInterface.removeColumn('hr_employees', 'status', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'termination_date', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'hire_date', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'grade', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'location', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'department', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'managerId', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'email', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'name', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'employee_no', {
transaction,
});
await queryInterface.removeColumn('hr_employees', 'orgId', {
transaction,
});
await queryInterface.removeColumn('hr_attendance', 'leave_type', {
transaction,
});
await queryInterface.removeColumn('hr_attendance', 'hours_worked', {
transaction,
});
await queryInterface.removeColumn('hr_attendance', 'date', {
transaction,
});
await queryInterface.removeColumn('hr_attendance', 'employeeId', {
transaction,
});
await queryInterface.removeColumn('hr_attendance', 'orgId', {
transaction,
});
await queryInterface.removeColumn('hr_applicants', 'offer_accepted_at', {
transaction,
});
await queryInterface.removeColumn('hr_applicants', 'offer_extended_at', {
transaction,
});
await queryInterface.removeColumn('hr_applicants', 'source', {
transaction,
});
await queryInterface.removeColumn('hr_applicants', 'stage', {
transaction,
});
await queryInterface.removeColumn('hr_applicants', 'name', {
transaction,
});
await queryInterface.removeColumn('hr_applicants', 'reqId', {
transaction,
});
await queryInterface.removeColumn('hr_applicants', 'orgId', {
transaction,
});
await queryInterface.removeColumn('fin_vendors', 'country', {
transaction,
});
await queryInterface.removeColumn('fin_vendors', 'tax_id', {
transaction,
});
await queryInterface.removeColumn('fin_vendors', 'name', { transaction });
await queryInterface.removeColumn('fin_vendors', 'orgId', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'source', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'memo', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'customerId', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'vendorId', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'project_code', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'cost_center', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'fx_rate', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'currency', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'amount', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'tx_ts', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'accountId', {
transaction,
});
await queryInterface.removeColumn('fin_transactions', 'orgId', {
transaction,
});
await queryInterface.removeColumn('fin_forecasts', 'amount', {
transaction,
});
await queryInterface.removeColumn('fin_forecasts', 'month', {
transaction,
});
await queryInterface.removeColumn('fin_forecasts', 'accountId', {
transaction,
});
await queryInterface.removeColumn('fin_forecasts', 'cost_center', {
transaction,
});
await queryInterface.removeColumn('fin_forecasts', 'fiscal_year', {
transaction,
});
await queryInterface.removeColumn('fin_forecasts', 'orgId', {
transaction,
});
await queryInterface.removeColumn('fin_customers', 'country', {
transaction,
});
await queryInterface.removeColumn('fin_customers', 'segment', {
transaction,
});
await queryInterface.removeColumn('fin_customers', 'name', {
transaction,
});
await queryInterface.removeColumn('fin_customers', 'orgId', {
transaction,
});
await queryInterface.removeColumn('fin_budgets', 'amount', {
transaction,
});
await queryInterface.removeColumn('fin_budgets', 'month', {
transaction,
});
await queryInterface.removeColumn('fin_budgets', 'accountId', {
transaction,
});
await queryInterface.removeColumn('fin_budgets', 'cost_center', {
transaction,
});
await queryInterface.removeColumn('fin_budgets', 'fiscal_year', {
transaction,
});
await queryInterface.removeColumn('fin_budgets', 'orgId', {
transaction,
});
await queryInterface.removeColumn('fin_ar', 'status', { transaction });
await queryInterface.removeColumn('fin_ar', 'amount', { transaction });
await queryInterface.removeColumn('fin_ar', 'due_date', { transaction });
await queryInterface.removeColumn('fin_ar', 'customerId', {
transaction,
});
await queryInterface.removeColumn('fin_ar', 'invoice_no', {
transaction,
});
await queryInterface.removeColumn('fin_ar', 'orgId', { transaction });
await queryInterface.removeColumn('fin_ap', 'status', { transaction });
await queryInterface.removeColumn('fin_ap', 'amount', { transaction });
await queryInterface.removeColumn('fin_ap', 'due_date', { transaction });
await queryInterface.removeColumn('fin_ap', 'vendorId', { transaction });
await queryInterface.removeColumn('fin_ap', 'bill_no', { transaction });
await queryInterface.removeColumn('fin_ap', 'orgId', { transaction });
await queryInterface.removeColumn('fin_accounts', 'is_active', {
transaction,
});
await queryInterface.removeColumn('fin_accounts', 'parentId', {
transaction,
});
await queryInterface.removeColumn('fin_accounts', 'type', {
transaction,
});
await queryInterface.removeColumn('fin_accounts', 'name', {
transaction,
});
await queryInterface.removeColumn('fin_accounts', 'code', {
transaction,
});
await queryInterface.removeColumn('fin_accounts', 'orgId', {
transaction,
});
await queryInterface.removeColumn('data_connections', 'last_sync_at', {
transaction,
});
await queryInterface.removeColumn('data_connections', 'status', {
transaction,
});
await queryInterface.removeColumn('data_connections', 'config_json', {
transaction,
});
await queryInterface.removeColumn('data_connections', 'name', {
transaction,
});
await queryInterface.removeColumn('data_connections', 'type', {
transaction,
});
await queryInterface.removeColumn('data_connections', 'orgId', {
transaction,
});
await queryInterface.removeColumn('audit_logs', 'diff_json', {
transaction,
});
await queryInterface.removeColumn('audit_logs', 'entity_id', {
transaction,
});
await queryInterface.removeColumn('audit_logs', 'entity', {
transaction,
});
await queryInterface.removeColumn('audit_logs', 'action', {
transaction,
});
await queryInterface.removeColumn('audit_logs', 'userId', {
transaction,
});
await queryInterface.removeColumn('audit_logs', 'orgId', { 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('organizations', { transaction });
await queryInterface.dropTable('permissions', { transaction });
await queryInterface.dropTable('roles', { transaction });
await queryInterface.dropTable('ops_shipments', { transaction });
await queryInterface.dropTable('ops_production_log', { transaction });
await queryInterface.dropTable('ops_plants', { transaction });
await queryInterface.dropTable('ops_orders', { transaction });
await queryInterface.dropTable('ops_lines', { transaction });
await queryInterface.dropTable('ops_inventory', { transaction });
await queryInterface.dropTable('ops_incidents', { transaction });
await queryInterface.dropTable('hr_reqs', { transaction });
await queryInterface.dropTable('hr_positions', { transaction });
await queryInterface.dropTable('hr_payroll', { transaction });
await queryInterface.dropTable('hr_employees', { transaction });
await queryInterface.dropTable('hr_attendance', { transaction });
await queryInterface.dropTable('hr_applicants', { transaction });
await queryInterface.dropTable('fin_vendors', { transaction });
await queryInterface.dropTable('fin_transactions', { transaction });
await queryInterface.dropTable('fin_forecasts', { transaction });
await queryInterface.dropTable('fin_customers', { transaction });
await queryInterface.dropTable('fin_budgets', { transaction });
await queryInterface.dropTable('fin_ar', { transaction });
await queryInterface.dropTable('fin_ap', { transaction });
await queryInterface.dropTable('fin_accounts', { transaction });
await queryInterface.dropTable('data_connections', { transaction });
await queryInterface.dropTable('audit_logs', { transaction });
await queryInterface.dropTable('users', { transaction });
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
},
};