ToolJet/server/data-migrations/1686829426671-BackFillCurrentEnvironmentId.ts

61 lines
2.2 KiB
TypeScript
Raw Normal View History

[Improvements] Environment changes (#6762) * Added priority, enabled, current_environment_id columns - added data-migrations to backfill the priority and current environment id for each version * working on multi environments improvement - added checks for promoted env - promote env feature - released app & production env check - promoted version definition check * added import support * working on migration issues * fixed failing migration * fixed failing migration once again * Fixed possible bugs - seed - test case helpers - app version release * fixed migration bug * working on migration progress * working on migration progress class * added migration progress * fixed unit tests * fixed e2e cases * added default priority * added PR changes * changed import logic * added global datasource design and api changes * changed default env if the id is null * added unique constraint and a bug fix * changed app versions api - added current environment id to the where conditions * fixed failing test cases * added new test cases * added new api changes * added back the enabled check * fixed test case * change: added environment to create versions dto * typo: environmentId * added new api for fetching versions * added appVersions count changes to CE * Changed app versions by environmentid logic * added PR changes for EE * fixed wrong promoted env id issue * fix: can't switch to staging * added import export changes - update delete modal text * added EE import export code, modal updated text * added common migration code for CE and EE * fixes - enable run button for released version - disable change datasource for queries * changed released version popup design to new EE design * add: hide delete icons for released version
2023-07-11 04:40:03 +00:00
import { App } from 'src/entities/app.entity';
import { AppVersion } from 'src/entities/app_version.entity';
import { Organization } from 'src/entities/organization.entity';
import { MigrationProgress } from 'src/helpers/utils.helper';
import { EntityManager, MigrationInterface, QueryRunner } from 'typeorm';
export class BackFillCurrentEnvironmentId1686829426671 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
//back fill current_environment_id to production env id
await this.backFillNewColumn(queryRunner.manager);
}
async backFillNewColumn(manager: EntityManager) {
const organizations = await manager.find(Organization, {
select: ['id', 'appEnvironments'],
relations: ['appEnvironments'],
});
const migrationProgress = new MigrationProgress('BackFillCurrentEnvironmentId1686829426671', organizations.length);
for (const organization of organizations) {
const productionEnvironment = organization.appEnvironments.find((appEnvironment) => appEnvironment.isDefault);
const developmentEnvironment = organization.appEnvironments.find(
(appEnvironment) => appEnvironment.priority === 1
);
const apps = await manager.find(App, {
select: ['id', 'appVersions', 'currentVersionId'],
where: {
organizationId: organization.id,
},
relations: ['appVersions'],
});
for (const { appVersions, currentVersionId } of apps) {
for (const appVersion of appVersions) {
console.log('Updating app version =>', appVersion.id);
let envToUpdate: string;
/* For CE always the this condition will only work */
if ((currentVersionId && currentVersionId === appVersion.id) || organization.appEnvironments.length === 1) {
envToUpdate = productionEnvironment.id;
} else {
envToUpdate = developmentEnvironment.id;
}
await manager.update(
AppVersion,
{ id: appVersion.id },
{
currentEnvironmentId: envToUpdate,
}
);
}
}
migrationProgress.show();
}
}
public async down(queryRunner: QueryRunner): Promise<void> {}
}