Morph Relations : deleteOneField (#13349)

This PR adapts teh deleteOneField to make sure morph relations can be
deleted, either
- from a relation type, 
- or from a morph relation type (which is the most obvious case).

This PR covers 
- the deletion of fieldMetadata 
- and the migrationof workspace schemas, by using the already existing
definition of relation migrations

This PR implements a new test suite: "Delete Object metadata with morph
relation" and completes the other test suites for FieldMetadata and
ObjectMetadata creation/deletion.

Last, we added a nitpick from @paul I forgot on a previous PR on
process-nested-realtion-v2

Fixes https://github.com/twentyhq/core-team-issues/issues/1197
This commit is contained in:
Guillim
2025-07-24 14:40:14 +02:00
committed by GitHub
parent 15e13b4267
commit 1ea451c8be
9 changed files with 617 additions and 57 deletions
@@ -0,0 +1,20 @@
import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isFieldMetadataTypeMorphRelation } from 'src/engine/metadata-modules/field-metadata/utils/is-field-metadata-type-morph-relation.util';
import { isFieldMetadataTypeRelation } from 'src/engine/metadata-modules/field-metadata/utils/is-field-metadata-type-relation.util';
export const areFieldMetadatasTypeRelationOrMorphRelation = (
fieldMetadatas: FieldMetadataEntity[],
): fieldMetadatas is Array<
FieldMetadataEntity &
FieldMetadataEntity<
FieldMetadataType.MORPH_RELATION | FieldMetadataType.RELATION
>
> => {
return fieldMetadatas.every(
(fieldMetadata) =>
isFieldMetadataTypeRelation(fieldMetadata) ||
isFieldMetadataTypeMorphRelation(fieldMetadata),
);
};
@@ -0,0 +1,10 @@
import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export const isFieldMetadataTypeMorphRelation = (
fieldMetadata: FieldMetadataEntity,
): fieldMetadata is FieldMetadataEntity &
FieldMetadataEntity<FieldMetadataType.MORPH_RELATION> => {
return fieldMetadata.type === FieldMetadataType.MORPH_RELATION;
};
@@ -0,0 +1,10 @@
import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export const isFieldMetadataTypeRelation = (
fieldMetadata: FieldMetadataEntity,
): fieldMetadata is FieldMetadataEntity &
FieldMetadataEntity<FieldMetadataType.RELATION> => {
return fieldMetadata.type === FieldMetadataType.RELATION;
};