relation-integration-tests (#13113)
This commit is contained in:
@ -51,6 +51,7 @@ type FieldMetadataSettingsMapping = {
|
||||
[FieldMetadataType.DATE_TIME]: FieldMetadataDateTimeSettings;
|
||||
[FieldMetadataType.TEXT]: FieldMetadataTextSettings;
|
||||
[FieldMetadataType.RELATION]: FieldMetadataRelationSettings;
|
||||
[FieldMetadataType.MORPH_RELATION]: FieldMetadataRelationSettings;
|
||||
};
|
||||
|
||||
export type FieldMetadataSettings<
|
||||
|
||||
@ -5,6 +5,8 @@ import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata
|
||||
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
|
||||
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
|
||||
|
||||
import { RelationDTO } from 'src/engine/metadata-modules/field-metadata/dtos/relation.dto';
|
||||
|
||||
export interface FieldMetadataInterface<
|
||||
T extends FieldMetadataType = FieldMetadataType,
|
||||
> {
|
||||
@ -25,6 +27,7 @@ export interface FieldMetadataInterface<
|
||||
relationTargetFieldMetadata?: FieldMetadataInterface;
|
||||
relationTargetObjectMetadataId?: string;
|
||||
relationTargetObjectMetadata?: ObjectMetadataInterface;
|
||||
relation?: RelationDTO;
|
||||
isCustom?: boolean;
|
||||
isSystem?: boolean;
|
||||
isActive?: boolean;
|
||||
|
||||
@ -584,7 +584,9 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
|
||||
isRemoteCreation: fieldMetadataInput.isRemoteCreation ?? false,
|
||||
});
|
||||
|
||||
migrationActions.push(...fieldMigrationActions);
|
||||
if (fieldMetadataInput.type !== FieldMetadataType.MORPH_RELATION) {
|
||||
migrationActions.push(...fieldMigrationActions);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -242,20 +242,28 @@ export class ObjectMetadataMigrationService {
|
||||
workspaceId: string,
|
||||
queryRunner?: QueryRunner,
|
||||
) {
|
||||
const relationFields = objectMetadata.fields.filter((field) =>
|
||||
isFieldMetadataInterfaceOfType(field, FieldMetadataType.RELATION),
|
||||
) as FieldMetadataEntity<FieldMetadataType.RELATION>[];
|
||||
const relationFields = objectMetadata.fields.filter(
|
||||
(field) =>
|
||||
isFieldMetadataInterfaceOfType(field, FieldMetadataType.RELATION) ||
|
||||
isFieldMetadataInterfaceOfType(field, FieldMetadataType.MORPH_RELATION),
|
||||
) as FieldMetadataEntity<
|
||||
FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION
|
||||
>[];
|
||||
|
||||
const relationFieldsToDelete = [
|
||||
...relationFields,
|
||||
...(relationFields.map(
|
||||
(relation) => relation.relationTargetFieldMetadata,
|
||||
) as FieldMetadataEntity<FieldMetadataType.RELATION>[]),
|
||||
) as FieldMetadataEntity<
|
||||
FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION
|
||||
>[]),
|
||||
];
|
||||
|
||||
await this.fieldMetadataRepository.delete(
|
||||
relationFieldsToDelete.map((relation) => relation.id),
|
||||
);
|
||||
if (relationFieldsToDelete.length !== 0) {
|
||||
await this.fieldMetadataRepository.delete(
|
||||
relationFieldsToDelete.map((relation) => relation.id),
|
||||
);
|
||||
}
|
||||
|
||||
for (const relationToDelete of relationFieldsToDelete) {
|
||||
if (
|
||||
@ -272,28 +280,30 @@ export class ObjectMetadataMigrationService {
|
||||
);
|
||||
}
|
||||
|
||||
await this.workspaceMigrationService.createCustomMigration(
|
||||
generateMigrationName(
|
||||
`delete-${RELATION_MIGRATION_PRIORITY_PREFIX}-${relationToDelete.name}`,
|
||||
),
|
||||
workspaceId,
|
||||
[
|
||||
{
|
||||
name: computeTableName(
|
||||
relationToDelete.object.nameSingular,
|
||||
relationToDelete.object.isCustom,
|
||||
),
|
||||
action: WorkspaceMigrationTableActionType.ALTER,
|
||||
columns: [
|
||||
{
|
||||
action: WorkspaceMigrationColumnActionType.DROP,
|
||||
columnName: joinColumnName,
|
||||
} satisfies WorkspaceMigrationColumnDrop,
|
||||
],
|
||||
},
|
||||
],
|
||||
queryRunner,
|
||||
);
|
||||
if (relationToDelete.type !== FieldMetadataType.MORPH_RELATION) {
|
||||
await this.workspaceMigrationService.createCustomMigration(
|
||||
generateMigrationName(
|
||||
`delete-${RELATION_MIGRATION_PRIORITY_PREFIX}-${relationToDelete.name}`,
|
||||
),
|
||||
workspaceId,
|
||||
[
|
||||
{
|
||||
name: computeTableName(
|
||||
relationToDelete.object.nameSingular,
|
||||
relationToDelete.object.isCustom,
|
||||
),
|
||||
action: WorkspaceMigrationTableActionType.ALTER,
|
||||
columns: [
|
||||
{
|
||||
action: WorkspaceMigrationColumnActionType.DROP,
|
||||
columnName: joinColumnName,
|
||||
} satisfies WorkspaceMigrationColumnDrop,
|
||||
],
|
||||
},
|
||||
],
|
||||
queryRunner,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
await this.workspaceMigrationService.createCustomMigration(
|
||||
|
||||
Reference in New Issue
Block a user