ToolJet/server/data-migrations/1686826460358-BackFillAppEnvironmentsPriorityColumn.ts
2025-02-25 12:22:50 +05:30

46 lines
1.8 KiB
TypeScript

import { Organization } from '@entities/organization.entity';
import { defaultAppEnvironments } from '@helpers/utils.helper';
import { MigrationProgress } from '@helpers/migration.helper';
import { EntityManager, MigrationInterface, QueryRunner, TableUnique } from 'typeorm';
export class BackFillAppEnvironmentsPriorityColumn1686826460358 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
//backfill new columns
await this.backFillPriorityColumn(queryRunner.manager);
await queryRunner.createUniqueConstraint(
'app_environments',
new TableUnique({
name: 'unique_organization_id_priority',
columnNames: ['organization_id', 'priority'],
})
);
}
async backFillPriorityColumn(manager: EntityManager) {
const organizations = await manager
.createQueryBuilder(Organization, 'organizations')
.leftJoinAndSelect('organizations.appEnvironments', 'appEnvironments')
.getMany();
const migrationProgress = new MigrationProgress(
'BackFillAppEnvironmentsPriorityColumn1686826460358',
organizations.length
);
for (const { appEnvironments } of organizations) {
for (const appEnvironment of appEnvironments) {
console.log('Updating app environment =>', appEnvironment.id);
const priority = defaultAppEnvironments.find(
(defaultAppEnvironment) => defaultAppEnvironment.name === appEnvironment.name
).priority;
await manager.query('UPDATE app_environments SET priority = $1 WHERE id = $2;', [priority, appEnvironment.id]);
}
migrationProgress.show();
}
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropUniqueConstraint('app_environments', 'unique_organization_id_priority');
}
}