Morph relation v2 schema runner (#14195)
close https://github.com/twentyhq/core-team-issues/issues/1410
This commit is contained in:
+5
-4
@@ -1,10 +1,11 @@
|
||||
import { type FromTo } from 'twenty-shared/types';
|
||||
import { type FieldMetadataType, type FromTo } from 'twenty-shared/types';
|
||||
|
||||
import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { type FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type';
|
||||
|
||||
export type FlatFieldMetadataPropertyUpdate<
|
||||
T extends FlatFieldMetadataPropertiesToCompare,
|
||||
P extends FlatFieldMetadataPropertiesToCompare,
|
||||
T extends FieldMetadataType = FieldMetadataType,
|
||||
> = {
|
||||
property: T;
|
||||
} & FromTo<FieldMetadataEntity[T]>;
|
||||
property: P;
|
||||
} & FromTo<FieldMetadataEntity<T>[P]>;
|
||||
|
||||
+68
-21
@@ -1,11 +1,13 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { ColumnType, type QueryRunner } from 'typeorm';
|
||||
|
||||
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface';
|
||||
|
||||
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type';
|
||||
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
|
||||
import { getCompositeTypeOrThrow } from 'src/engine/metadata-modules/field-metadata/utils/get-composite-type-or-throw.util';
|
||||
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
|
||||
@@ -39,13 +41,14 @@ import {
|
||||
} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/workspace-schema-enum-operations.util';
|
||||
|
||||
type UpdateFieldPropertyUpdateHandlerArgs<
|
||||
T extends FlatFieldMetadataPropertiesToCompare,
|
||||
P extends FlatFieldMetadataPropertiesToCompare,
|
||||
T extends FieldMetadataType = FieldMetadataType,
|
||||
> = {
|
||||
queryRunner: QueryRunner;
|
||||
schemaName: string;
|
||||
tableName: string;
|
||||
flatFieldMetadata: FlatFieldMetadata;
|
||||
update: FlatFieldMetadataPropertyUpdate<T>;
|
||||
flatFieldMetadata: FlatFieldMetadata<T>;
|
||||
update: FlatFieldMetadataPropertyUpdate<P, T>;
|
||||
};
|
||||
|
||||
@Injectable()
|
||||
@@ -140,6 +143,21 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct
|
||||
});
|
||||
optimisticFlatFieldMetadata.options = update.to ?? [];
|
||||
}
|
||||
if (
|
||||
isMorphOrRelationFlatFieldMetadata(optimisticFlatFieldMetadata) &&
|
||||
update.property === 'settings'
|
||||
) {
|
||||
await this.handleMorphOrRelationSettingsUpdate({
|
||||
flatFieldMetadata: optimisticFlatFieldMetadata,
|
||||
queryRunner,
|
||||
schemaName,
|
||||
tableName,
|
||||
update: update as FlatFieldMetadataPropertyUpdate<
|
||||
'settings',
|
||||
MorphOrRelationFieldMetadataType
|
||||
>,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -248,7 +266,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct
|
||||
defaultValue: compositeDefaultValue,
|
||||
});
|
||||
|
||||
await this.workspaceSchemaManagerService.columnManager.alterColumnDefault(
|
||||
return await this.workspaceSchemaManagerService.columnManager.alterColumnDefault(
|
||||
{
|
||||
queryRunner,
|
||||
schemaName,
|
||||
@@ -258,25 +276,25 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct
|
||||
},
|
||||
);
|
||||
}
|
||||
} else {
|
||||
const serializedNewDefaultValue = serializeDefaultValueV2({
|
||||
columnName: flatFieldMetadata.name,
|
||||
}
|
||||
|
||||
const serializedNewDefaultValue = serializeDefaultValueV2({
|
||||
columnName: flatFieldMetadata.name,
|
||||
schemaName,
|
||||
tableName,
|
||||
columnType,
|
||||
defaultValue: update.to,
|
||||
});
|
||||
|
||||
return await this.workspaceSchemaManagerService.columnManager.alterColumnDefault(
|
||||
{
|
||||
queryRunner,
|
||||
schemaName,
|
||||
tableName,
|
||||
columnType,
|
||||
defaultValue: update.to,
|
||||
});
|
||||
|
||||
await this.workspaceSchemaManagerService.columnManager.alterColumnDefault(
|
||||
{
|
||||
queryRunner,
|
||||
schemaName,
|
||||
tableName,
|
||||
columnName: flatFieldMetadata.name,
|
||||
defaultValue: serializedNewDefaultValue,
|
||||
},
|
||||
);
|
||||
}
|
||||
columnName: flatFieldMetadata.name,
|
||||
defaultValue: serializedNewDefaultValue,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
private async handleFieldOptionsUpdate({
|
||||
@@ -327,4 +345,33 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private async handleMorphOrRelationSettingsUpdate({
|
||||
queryRunner,
|
||||
schemaName,
|
||||
tableName,
|
||||
update,
|
||||
}: UpdateFieldPropertyUpdateHandlerArgs<
|
||||
'settings',
|
||||
MorphOrRelationFieldMetadataType
|
||||
>) {
|
||||
const fromJoinColumnName = update.from.joinColumnName;
|
||||
const toJoinColumnName = update.to.joinColumnName;
|
||||
|
||||
if (
|
||||
!isDefined(fromJoinColumnName) ||
|
||||
!isDefined(toJoinColumnName) ||
|
||||
fromJoinColumnName === toJoinColumnName
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
await this.workspaceSchemaManagerService.columnManager.renameColumn({
|
||||
newColumnName: fromJoinColumnName,
|
||||
oldColumnName: toJoinColumnName,
|
||||
queryRunner,
|
||||
schemaName,
|
||||
tableName,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user