import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { Command } from 'nest-commander'; import { DataSource, Repository } from 'typeorm'; import { ActiveOrSuspendedWorkspacesMigrationCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { RunOnWorkspaceArgs } from 'src/database/commands/command-runners/workspaces-migration.command-runner'; import { makeWebhookUniversalIdentifierAndApplicationIdNotNullQueries } from 'src/database/typeorm/core/migrations/utils/1769525557511-makeWebhookUniversalIdentifierAndApplicationIdNotNull.util'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager'; @Command({ name: 'upgrade:1-17:make-webhook-universal-identifier-and-application-id-not-nullable-migration', description: 'Make universalIdentifier and applicationId columns NOT NULL on webhook entity', }) export class MakeWebhookUniversalIdentifierAndApplicationIdNotNullableMigrationCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { private hasRunOnce = false; constructor( @InjectRepository(WorkspaceEntity) protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: GlobalWorkspaceOrmManager, protected readonly dataSourceService: DataSourceService, @InjectDataSource() private readonly coreDataSource: DataSource, ) { super(workspaceRepository, twentyORMGlobalManager, dataSourceService); } override async runOnWorkspace({ options, }: RunOnWorkspaceArgs): Promise { if (this.hasRunOnce) { this.logger.warn( 'Skipping has already been run once MakeWebhookUniversalIdentifierAndApplicationIdNotNullableMigrationCommand', ); return; } if (options.dryRun) { return; } const queryRunner = this.coreDataSource.createQueryRunner(); await queryRunner.connect(); await queryRunner.startTransaction(); try { await makeWebhookUniversalIdentifierAndApplicationIdNotNullQueries( queryRunner, ); await queryRunner.commitTransaction(); this.logger.log( 'Successfully run MakeWebhookUniversalIdentifierAndApplicationIdNotNullableMigrationCommand', ); this.hasRunOnce = true; } catch (error) { await queryRunner.rollbackTransaction(); this.logger.error( `Rolling back MakeWebhookUniversalIdentifierAndApplicationIdNotNullableMigrationCommand: ${error.message}`, ); } finally { await queryRunner.release(); } } }