ToolJet/server/migrations/1655726247638-AddUniqueConstraintToVersionName.ts
Akshay b4999a413b
Hotfix: Split data and db migrations (#3610)
* split data and db migrations

* comment audit logs

* make prod script to print logs

* wrap data migrations in single transaction
2022-07-14 14:03:21 +05:30

38 lines
1.4 KiB
TypeScript

import { AppVersion } from 'src/entities/app_version.entity';
import { EntityManager, MigrationInterface, QueryRunner, TableUnique } from 'typeorm';
export class AddUniqueConstraintToVersionName1655726247638 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
const entityManager = queryRunner.manager;
await this.migrateVersions(entityManager);
await queryRunner.createUniqueConstraint(
'app_versions',
new TableUnique({
name: 'name_app_id_app_versions_unique',
columnNames: ['name', 'app_id'],
})
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropUniqueConstraint('app_versions', 'name_app_id_app_versions_unique');
}
private async migrateVersions(entityManager: EntityManager) {
const appVersions = await entityManager.find(AppVersion);
for (const version of appVersions) {
const { name, appId, id } = version;
const versionsWithSameName = await entityManager.find(AppVersion, { appId, name });
if (versionsWithSameName.length > 1) {
const versionsNeedToChange = versionsWithSameName.filter((appVersion) => appVersion.id !== id);
for (const versionToChange of versionsNeedToChange) {
await entityManager.update(
AppVersion,
{ id: versionToChange.id },
{ name: `${versionToChange.name}_${Date.now()}` }
);
}
}
}
}
}