feat: workspace health type fix (#3890)

* feat: workspace health type fix

* Fix

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Jérémy M
2024-02-08 18:59:17 +01:00
committed by GitHub
parent 90b58518bb
commit 7ec968d5a2
8 changed files with 191 additions and 2 deletions

View File

@ -0,0 +1,35 @@
import { Injectable } from '@nestjs/common';
import { QueryRunner } from 'typeorm';
import { WorkspaceMigrationColumnAlter } from 'src/metadata/workspace-migration/workspace-migration.entity';
@Injectable()
export class WorkspaceMigrationTypeService {
constructor() {}
async alterType(
queryRunner: QueryRunner,
schemaName: string,
tableName: string,
migrationColumn: WorkspaceMigrationColumnAlter,
) {
const columnDefinition = migrationColumn.alteredColumnDefinition;
// Update the column type
// If casting is not possible, the query will fail
await queryRunner.query(`
ALTER TABLE "${schemaName}"."${tableName}"
ALTER COLUMN "${columnDefinition.columnName}" TYPE ${columnDefinition.columnType}
USING "${columnDefinition.columnName}"::${columnDefinition.columnType}
`);
// Update the column default value
if (columnDefinition.defaultValue) {
await queryRunner.query(`
ALTER TABLE "${schemaName}"."${tableName}"
ALTER COLUMN "${columnDefinition.columnName}" SET DEFAULT ${columnDefinition.defaultValue}::${columnDefinition.columnType};
`);
}
}
}

View File

@ -7,13 +7,19 @@ import { WorkspaceMigrationEnumService } from 'src/workspace/workspace-migration
import { WorkspaceMigrationRunnerService } from './workspace-migration-runner.service';
import { WorkspaceMigrationTypeService } from './services/workspace-migration-type.service';
@Module({
imports: [
WorkspaceDataSourceModule,
WorkspaceMigrationModule,
WorkspaceCacheVersionModule,
],
providers: [WorkspaceMigrationRunnerService, WorkspaceMigrationEnumService],
providers: [
WorkspaceMigrationRunnerService,
WorkspaceMigrationEnumService,
WorkspaceMigrationTypeService,
],
exports: [WorkspaceMigrationRunnerService],
})
export class WorkspaceMigrationRunnerModule {}

View File

@ -22,6 +22,7 @@ import { WorkspaceCacheVersionService } from 'src/metadata/workspace-cache-versi
import { WorkspaceMigrationEnumService } from 'src/workspace/workspace-migration-runner/services/workspace-migration-enum.service';
import { customTableDefaultColumns } from './utils/custom-table-default-column.util';
import { WorkspaceMigrationTypeService } from './services/workspace-migration-type.service';
@Injectable()
export class WorkspaceMigrationRunnerService {
@ -30,6 +31,7 @@ export class WorkspaceMigrationRunnerService {
private readonly workspaceMigrationService: WorkspaceMigrationService,
private readonly workspaceCacheVersionService: WorkspaceCacheVersionService,
private readonly workspaceMigrationEnumService: WorkspaceMigrationEnumService,
private readonly workspaceMigrationTypeService: WorkspaceMigrationTypeService,
) {}
/**
@ -275,6 +277,23 @@ export class WorkspaceMigrationRunnerService {
);
}
if (
migrationColumn.currentColumnDefinition.columnType !==
migrationColumn.alteredColumnDefinition.columnType
) {
await this.workspaceMigrationTypeService.alterType(
queryRunner,
schemaName,
tableName,
migrationColumn,
);
migrationColumn.currentColumnDefinition.columnType =
migrationColumn.alteredColumnDefinition.columnType;
return;
}
await queryRunner.changeColumn(
`${schemaName}.${tableName}`,
new TableColumn({