From 7df9094939292346cf8ca14ddb2c9ca776e28f87 Mon Sep 17 00:00:00 2001 From: Paul Rastoin <45004772+prastoin@users.noreply.github.com> Date: Fri, 29 Aug 2025 17:25:12 +0200 Subject: [PATCH] `RelationFieldMetadataType` to `MorphOrRelationFieldMetadataType` and so on (#14160) --- ...composite-input-type-definition.factory.ts | 4 +-- ...omposite-object-type-definition.factory.ts | 4 +-- .../utils/object-contains-relation-field.ts | 4 +-- .../field-metadata/field-metadata.resolver.ts | 4 +-- ...ph-or-relation-field-metadata-type.type.ts | 9 +++++ .../relation-field-metadata-type.type.ts | 8 ----- ...t-field-metadata-type-validator.service.ts | 6 ++-- .../flat-field-metadata-validator.service.ts | 4 +-- .../compare-two-flat-field-metadata.util.ts | 8 ++--- ...related-to-morph-relation-or-throw.util.ts | 4 +-- ...arget-flat-field-metadata-or-throw.util.ts | 6 ++-- ...ield-input-to-flat-field-metadatas.util.ts | 9 +++-- ...ield-input-to-flat-field-metadatas.util.ts | 34 +++++++++---------- ...relation-flat-field-metadata-pair.util.ts} | 14 ++++---- ...h-or-relation-flat-field-metadata.util.ts} | 12 +++---- ...t-field-metadata-name-availability.util.ts | 5 +-- ...h-or-relation-flat-field-metadata.util.ts} | 6 ++-- .../flat-object-metadata-validator.service.ts | 8 ++--- ...-target-flat-object-metadata-maps.util.ts} | 6 ++-- ...ph-or-relation-field-metadata-type.util.ts | 13 +++++++ .../is-relation-field-metadata-type.util.ts | 11 ------ .../services/database-structure.service.ts | 4 +-- .../services/field-metadata-health.service.ts | 4 +-- ...ration-v2-field-actions-builder.service.ts | 19 +++++------ .../update-field-action-handler.service.ts | 10 +++--- 25 files changed, 110 insertions(+), 106 deletions(-) create mode 100644 packages/twenty-server/src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type.ts rename packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/{generate-relation-or-morph-relation-flat-field-metadata-pair.util.ts => generate-morph-or-relation-flat-field-metadata-pair.util.ts} (89%) rename packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/{is-relation-flat-field-metadata.util.ts => is-morph-or-relation-flat-field-metadata.util.ts} (52%) rename packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/{validate-relation-or-morph-relation-flat-field-metadata.util.ts => validate-morph-or-relation-flat-field-metadata.util.ts} (90%) rename packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/{compute-relation-target-flat-object-metadata-maps.util.ts => compute-morph-or-relation-target-flat-object-metadata-maps.util.ts} (81%) create mode 100644 packages/twenty-server/src/engine/utils/is-morph-or-relation-field-metadata-type.util.ts delete mode 100644 packages/twenty-server/src/engine/utils/is-relation-field-metadata-type.util.ts diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/factories/composite-input-type-definition.factory.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/factories/composite-input-type-definition.factory.ts index 9221744b7a..61313d8945 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/factories/composite-input-type-definition.factory.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/factories/composite-input-type-definition.factory.ts @@ -14,7 +14,7 @@ import { InputTypeDefinitionKind, } from 'src/engine/api/graphql/workspace-schema-builder/factories/input-type-definition.factory'; import { computeCompositePropertyTarget } from 'src/engine/api/graphql/workspace-schema-builder/utils/compute-composite-property-target.util'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; import { pascalCase } from 'src/utils/pascal-case'; import { InputTypeFactory } from './input-type.factory'; @@ -57,7 +57,7 @@ export class CompositeInputTypeDefinitionFactory { for (const property of compositeType.properties) { // Relation fields are not supported in composite types - if (isRelationFieldMetadataType(property.type)) { + if (isMorphOrRelationFieldMetadataType(property.type)) { this.logger.error( 'Relation fields are not supported in composite types', { compositeType, property }, diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/factories/composite-object-type-definition.factory.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/factories/composite-object-type-definition.factory.ts index 558e212492..503cf149cb 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/factories/composite-object-type-definition.factory.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/factories/composite-object-type-definition.factory.ts @@ -12,7 +12,7 @@ import { } from 'src/engine/api/graphql/workspace-schema-builder/factories/object-type-definition.factory'; import { OutputTypeFactory } from 'src/engine/api/graphql/workspace-schema-builder/factories/output-type.factory'; import { computeCompositePropertyTarget } from 'src/engine/api/graphql/workspace-schema-builder/utils/compute-composite-property-target.util'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; import { pascalCase } from 'src/utils/pascal-case'; @Injectable() @@ -52,7 +52,7 @@ export class CompositeObjectTypeDefinitionFactory { for (const property of compositeType.properties) { // Relation fields are not supported in composite types - if (isRelationFieldMetadataType(property.type)) { + if (isMorphOrRelationFieldMetadataType(property.type)) { this.logger.error( 'Relation fields are not supported in composite types', { compositeType, property }, diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/object-contains-relation-field.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/object-contains-relation-field.ts index c17d624dbe..33e7083393 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/object-contains-relation-field.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/object-contains-relation-field.ts @@ -1,10 +1,10 @@ import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; export const objectContainsRelationField = ( objectMetadata: ObjectMetadataEntity, ): boolean => { return objectMetadata.fields.some((field) => - isRelationFieldMetadataType(field.type), + isMorphOrRelationFieldMetadataType(field.type), ); }; diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.resolver.ts index 2389a2a12e..81a8e65595 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.resolver.ts @@ -46,8 +46,8 @@ import { fromFieldMetadataEntityToFieldMetadataDto } from 'src/engine/metadata-m import { fromObjectMetadataEntityToObjectMetadataDto } from 'src/engine/metadata-modules/field-metadata/utils/from-object-metadata-entity-to-object-metadata-dto.util'; import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; import { PermissionsGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/permissions/utils/permissions-graphql-api-exception.filter'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; import { isMorphRelationFieldMetadataType } from 'src/engine/utils/is-morph-relation-field-metadata-type.util'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; @UseGuards(WorkspaceAuthGuard) @UsePipes(ResolverValidationPipe) @@ -174,7 +174,7 @@ export class FieldMetadataResolver { @Parent() fieldMetadata: FieldMetadataEntity, @Context() context: { loaders: IDataloaders }, ): Promise { - if (!isRelationFieldMetadataType(fieldMetadata.type)) { + if (!isMorphOrRelationFieldMetadataType(fieldMetadata.type)) { return null; } diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type.ts new file mode 100644 index 0000000000..bec55cf0a4 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type.ts @@ -0,0 +1,9 @@ +import { FieldMetadataType } from 'twenty-shared/types'; + +export const MORPH_OR_RELATION_FIELD_TYPES = [ + FieldMetadataType.RELATION, + FieldMetadataType.MORPH_RELATION, +] as const; + +export type MorphOrRelationFieldMetadataType = + (typeof MORPH_OR_RELATION_FIELD_TYPES)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type.ts deleted file mode 100644 index 296c45e4bc..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { FieldMetadataType } from 'twenty-shared/types'; - -export const RELATION_FIELD_TYPES = [ - FieldMetadataType.RELATION, - FieldMetadataType.MORPH_RELATION, -] as const; - -export type RelationFieldMetadataType = (typeof RELATION_FIELD_TYPES)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service.ts index d45fcbac08..7c9b35c096 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service.ts @@ -11,7 +11,7 @@ import { ValidateOneFieldMetadataArgs } from 'src/engine/metadata-modules/flat-f import { type FlatFieldMetadataTypeValidator } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-type-validator.type'; import { FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type'; import { validateEnumSelectFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-enum-flat-field-metadata.util'; -import { validateRelationOrMorphRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-or-morph-relation-flat-field-metadata.util'; +import { validateMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util'; @Injectable() export class FlatFieldMetadataTypeValidatorService { constructor(private readonly featureFlagService: FeatureFlagService) {} @@ -70,7 +70,7 @@ export class FlatFieldMetadataTypeValidatorService { ]; } - return validateRelationOrMorphRelationFlatFieldMetadata({ + return validateMorphOrRelationFlatFieldMetadata({ existingFlatObjectMetadataMaps, flatFieldMetadataToValidate, workspaceId, @@ -123,7 +123,7 @@ export class FlatFieldMetadataTypeValidatorService { workspaceId, otherFlatObjectMetadataMapsToValidate, }) => - validateRelationOrMorphRelationFlatFieldMetadata({ + validateMorphOrRelationFlatFieldMetadata({ existingFlatObjectMetadataMaps, flatFieldMetadataToValidate, workspaceId, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service.ts index 4a8da96c7f..8334a78d8d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service.ts @@ -13,7 +13,7 @@ import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-m import { compareTwoFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util'; import { isFlatFieldMetadataNameSyncedWithLabel } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-name-synced-with-label.util'; import { isFlatFieldMetadataEntityOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util'; -import { isRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-relation-flat-field-metadata.util'; +import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; import { validateFlatFieldMetadataNameAvailability } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util'; import { validateFlatFieldMetadataName } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name.util'; import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type'; @@ -209,7 +209,7 @@ export class FlatFieldMetadataValidatorService { } const isRelationFieldAndRelationTargetObjectMetadataHasBeenDeleted = - isRelationFlatFieldMetadata(flatFieldMetadataToDelete) && + isMorphOrRelationFlatFieldMetadata(flatFieldMetadataToDelete) && !isDefined( existingFlatObjectMetadataMaps.byId[ flatFieldMetadataToDelete.relationTargetObjectMetadataId diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util.ts index 4967616909..73fc84eb7a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util.ts @@ -10,7 +10,7 @@ import { type FlatFieldMetadataRelationPropertiesToCompare } from 'src/engine/me import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isFlatFieldMetadataJsonbProperty } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-jsonb-property.util'; import { isStandardMetadata } from 'src/engine/metadata-modules/utils/is-standard-metadata.util'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; import { type UpdateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; @@ -39,12 +39,12 @@ export const compareTwoFlatFieldMetadata = ({ } // Remove below assertion when we authorize relation edition, see https://github.com/twentyhq/twenty/commit/39f6f3c4bb101272a9014e142a842d0801a3c33b - const isRelationFieldType = + const isMorphOrRelationFieldType = isDefined(fieldMetadata.type) && - isRelationFieldMetadataType(fieldMetadata.type); + isMorphOrRelationFieldMetadataType(fieldMetadata.type); if ( - isRelationFieldType && + isMorphOrRelationFieldType && !FLAT_FIELD_METADATA_RELATION_PROPERTIES_TO_COMPARE.includes( property as FlatFieldMetadataRelationPropertiesToCompare, ) diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util.ts index 33af20a0b7..4dca45a0a0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util.ts @@ -1,7 +1,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { type RelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type'; +import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util'; import { isFlatFieldMetadataEntityOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util'; @@ -18,7 +18,7 @@ export type FindFlatFieldMetadatasRelatedToMorphRelationOrThrowArgs = { export const findFlatFieldMetadatasRelatedToMorphRelationOrThrow = ({ flatObjectMetadataMaps, flatFieldMetadata: morphRelationFlatFieldMetadata, -}: FindFlatFieldMetadatasRelatedToMorphRelationOrThrowArgs): FlatFieldMetadata[] => { +}: FindFlatFieldMetadatasRelatedToMorphRelationOrThrowArgs): FlatFieldMetadata[] => { const flatObjectMetadataWithFlatFieldMaps = flatObjectMetadataMaps.byId[ morphRelationFlatFieldMetadata.objectMetadataId diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util.ts index 8ab74af378..24f1a1b715 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util.ts @@ -1,18 +1,18 @@ -import { isDefined } from 'twenty-shared/utils'; import { FieldMetadataType } from 'twenty-shared/types'; +import { isDefined } from 'twenty-shared/utils'; import { FieldMetadataException, FieldMetadataExceptionCode, } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; -import { type RelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type'; +import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isFlatFieldMetadataEntityOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util'; import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type'; export type GetRelationFlatFieldMetadatasUtilArgs = { flatObjectMetadataMaps: FlatObjectMetadataMaps; - flatFieldMetadata: FlatFieldMetadata; + flatFieldMetadata: FlatFieldMetadata; }; export const findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow = ({ diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util.ts index 4e5fc05191..78ff48c967 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util.ts @@ -7,9 +7,10 @@ import { import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; +import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; import { type FieldInputTranspilationResult } from 'src/engine/metadata-modules/flat-field-metadata/types/field-input-transpilation-result.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { generateRelationOrMorphRelationFlatFieldMetadataPair } from 'src/engine/metadata-modules/flat-field-metadata/utils/generate-relation-or-morph-relation-flat-field-metadata-pair.util'; +import { generateMorphOrRelationFlatFieldMetadataPair } from 'src/engine/metadata-modules/flat-field-metadata/utils/generate-morph-or-relation-flat-field-metadata-pair.util'; import { validateMorphRelationCreationPayload } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-relation-creation-payload.util'; import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; @@ -28,7 +29,9 @@ export const fromMorphRelationCreateFieldInputToFlatFieldMetadatas = async ({ sourceFlatObjectMetadata, workspaceId, }: FromMorphRelationCreateFieldInputToFlatFieldMetadatasArgs): Promise< - FieldInputTranspilationResult + FieldInputTranspilationResult< + FlatFieldMetadata[] + > > => { const rawMorphCreationPayload = createFieldInput.morphRelationsCreationPayload; @@ -70,7 +73,7 @@ export const fromMorphRelationCreateFieldInputToFlatFieldMetadatas = async ({ targetFlatObjectMetadata.nameSingular, }); - return generateRelationOrMorphRelationFlatFieldMetadataPair({ + return generateMorphOrRelationFlatFieldMetadataPair({ createFieldInput: { ...createFieldInput, relationCreationPayload, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadatas.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadatas.util.ts index d370766099..ce4d6ece0f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadatas.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadatas.util.ts @@ -4,11 +4,10 @@ import { isDefined } from 'twenty-shared/utils'; import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; -import { type RelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type'; import { computeRelationFieldJoinColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-relation-field-join-column-name.util'; import { type FieldInputTranspilationResult } from 'src/engine/metadata-modules/flat-field-metadata/types/field-input-transpilation-result.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { generateRelationOrMorphRelationFlatFieldMetadataPair } from 'src/engine/metadata-modules/flat-field-metadata/utils/generate-relation-or-morph-relation-flat-field-metadata-pair.util'; +import { generateMorphOrRelationFlatFieldMetadataPair } from 'src/engine/metadata-modules/flat-field-metadata/utils/generate-morph-or-relation-flat-field-metadata-pair.util'; import { validateRelationCreationPayload } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-creation-payload.util'; import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; @@ -27,7 +26,7 @@ export const fromRelationCreateFieldInputToFlatFieldMetadatas = async ({ createFieldInput, workspaceId, }: FromRelationCreateFieldInputToFlatFieldMetadataArgs): Promise< - FieldInputTranspilationResult[]> + FieldInputTranspilationResult[]> > => { const rawCreationPayload = createFieldInput.relationCreationPayload; @@ -54,23 +53,22 @@ export const fromRelationCreateFieldInputToFlatFieldMetadatas = async ({ const { relationCreationPayload, targetFlatObjectMetadata } = relationValidationResult.result; - const flatFieldMetadatas = - generateRelationOrMorphRelationFlatFieldMetadataPair({ - createFieldInput: { - ...createFieldInput, - relationCreationPayload, - }, - sourceFlatObjectMetadataJoinColumnName: - computeRelationFieldJoinColumnName({ - name: createFieldInput.name, - }), - sourceFlatObjectMetadata, - targetFlatObjectMetadata, - workspaceId, - }); + const flatFieldMetadatas = generateMorphOrRelationFlatFieldMetadataPair({ + createFieldInput: { + ...createFieldInput, + relationCreationPayload, + }, + sourceFlatObjectMetadataJoinColumnName: computeRelationFieldJoinColumnName({ + name: createFieldInput.name, + }), + sourceFlatObjectMetadata, + targetFlatObjectMetadata, + workspaceId, + }); return { status: 'success', - result: flatFieldMetadatas, + result: + flatFieldMetadatas as FlatFieldMetadata[], }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-relation-or-morph-relation-flat-field-metadata-pair.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-morph-or-relation-flat-field-metadata-pair.util.ts similarity index 89% rename from packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-relation-or-morph-relation-flat-field-metadata-pair.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-morph-or-relation-flat-field-metadata-pair.util.ts index d91ffe3aab..292c1d7177 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-relation-or-morph-relation-flat-field-metadata-pair.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-morph-or-relation-flat-field-metadata-pair.util.ts @@ -2,7 +2,7 @@ import { FieldMetadataType, RelationType } from 'twenty-shared/types'; import { v4 } from 'uuid'; import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; -import { type RelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type'; +import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; import { computeRelationFieldJoinColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-relation-field-join-column-name.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { getDefaultFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util'; @@ -31,23 +31,23 @@ const computeFieldMetadataRelationSettingsForRelationType = ({ }; }; -type GenerateRelationOrMorphRelationFlatFieldMetadataPairArgs = { +type GenerateMorphOrRelationFlatFieldMetadataPairArgs = { targetFlatObjectMetadata: FlatObjectMetadata; sourceFlatObjectMetadata: FlatObjectMetadata; sourceFlatObjectMetadataJoinColumnName: string; createFieldInput: Omit & Required< Pick - > & { type: RelationFieldMetadataType }; + > & { type: MorphOrRelationFieldMetadataType }; workspaceId: string; }; -export const generateRelationOrMorphRelationFlatFieldMetadataPair = ({ +export const generateMorphOrRelationFlatFieldMetadataPair = ({ createFieldInput, sourceFlatObjectMetadata, targetFlatObjectMetadata, workspaceId, sourceFlatObjectMetadataJoinColumnName, -}: GenerateRelationOrMorphRelationFlatFieldMetadataPairArgs): FlatFieldMetadata[] => { +}: GenerateMorphOrRelationFlatFieldMetadataPairArgs): FlatFieldMetadata[] => { const { relationCreationPayload } = createFieldInput; const sourceFlatFieldMetadataSettings = @@ -58,7 +58,7 @@ export const generateRelationOrMorphRelationFlatFieldMetadataPair = ({ const targetRelationTargetFieldMetadataId = v4(); const sourceRelationTargetFieldMetadataId = v4(); const sourceFlatFieldMetadata: Omit< - FlatFieldMetadata, + FlatFieldMetadata, 'flatRelationTargetFieldMetadata' > = { ...getDefaultFlatFieldMetadata({ @@ -120,5 +120,5 @@ export const generateRelationOrMorphRelationFlatFieldMetadataPair = ({ flatRelationTargetFieldMetadata: targetFlatFieldMetadata, }, targetFlatFieldMetadata, - ] satisfies FlatFieldMetadata[]; + ] satisfies FlatFieldMetadata[]; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-relation-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util.ts similarity index 52% rename from packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-relation-flat-field-metadata.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util.ts index 9d08916f27..e39047c14c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-relation-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util.ts @@ -1,13 +1,13 @@ import { - RELATION_FIELD_TYPES, - type RelationFieldMetadataType, -} from 'src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type'; + MORPH_OR_RELATION_FIELD_TYPES, + type MorphOrRelationFieldMetadataType, +} from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isFlatFieldMetadataEntityOfTypes } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-types.util'; -export const isRelationFlatFieldMetadata = ( +export const isMorphOrRelationFlatFieldMetadata = ( flatFieldMetadata: FlatFieldMetadata, -): flatFieldMetadata is FlatFieldMetadata => +): flatFieldMetadata is FlatFieldMetadata => isFlatFieldMetadataEntityOfTypes(flatFieldMetadata, [ - ...RELATION_FIELD_TYPES, + ...MORPH_OR_RELATION_FIELD_TYPES, ]); diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util.ts index 86ae2763f3..58d86921a4 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util.ts @@ -7,7 +7,7 @@ import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-me import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { type FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; const getReservedCompositeFieldNames = ( flatObjectMetadata: FlatObjectMetadata, @@ -47,7 +47,8 @@ export const validateFlatFieldMetadataNameAvailability = ({ flatObjectMetadata.flatFieldMetadatas.some( (field) => field.name === name || - (isRelationFieldMetadataType(field.type) && `${field.name}Id` === name), + (isMorphOrRelationFieldMetadataType(field.type) && + `${field.name}Id` === name), ) ) { errors.push({ diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-or-morph-relation-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util.ts similarity index 90% rename from packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-or-morph-relation-flat-field-metadata.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util.ts index a8f7101cf6..a5e50c184d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-or-morph-relation-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util.ts @@ -2,15 +2,15 @@ import { t } from '@lingui/core/macro'; import { isDefined, isValidUuid } from 'twenty-shared/utils'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; -import { type RelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type'; +import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; import { type ValidateOneFieldMetadataArgs } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service'; import { type FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type'; -export const validateRelationOrMorphRelationFlatFieldMetadata = async ({ +export const validateMorphOrRelationFlatFieldMetadata = async ({ existingFlatObjectMetadataMaps, flatFieldMetadataToValidate, otherFlatObjectMetadataMapsToValidate, -}: ValidateOneFieldMetadataArgs): Promise< +}: ValidateOneFieldMetadataArgs): Promise< FlatFieldMetadataValidationError[] > => { const { relationTargetFieldMetadataId, relationTargetObjectMetadataId } = diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/services/flat-object-metadata-validator.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/services/flat-object-metadata-validator.service.ts index 84b3ea70ff..b9eb4e2c33 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/services/flat-object-metadata-validator.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/services/flat-object-metadata-validator.service.ts @@ -5,7 +5,7 @@ import { isDefined } from 'twenty-shared/utils'; import { FlatFieldMetadataValidatorService } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service'; import { FailedFlatFieldMetadataValidation } from 'src/engine/metadata-modules/flat-field-metadata/types/failed-flat-field-metadata-validation.type'; -import { isRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-relation-flat-field-metadata.util'; +import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type'; import { addFlatFieldMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/add-flat-field-metadata-in-flat-object-metadata-maps-or-throw.util'; import { addFlatObjectMetadataToFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/add-flat-object-metadata-to-flat-object-metadata-maps-or-throw.util'; @@ -14,7 +14,7 @@ import { FailedFlatObjectMetadataValidation } from 'src/engine/metadata-modules/ import { FlatObjectMetadataValidationError } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-validation-error.type'; import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { areFlatObjectMetadataNamesSyncedWithLabels } from 'src/engine/metadata-modules/flat-object-metadata/utils/are-flat-object-metadata-names-synced-with-labels.util'; -import { computeRelationTargetFlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/compute-relation-target-flat-object-metadata-maps.util'; +import { computeMorphOrRelationTargetFlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/compute-morph-or-relation-target-flat-object-metadata-maps.util'; import { getDefaultFailedFlatObjectMetadataValidation } from 'src/engine/metadata-modules/flat-object-metadata/utils/get-default-failed-flat-object-metadata-validation.type'; import { validateFlatObjectMetadataIdentifiers } from 'src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-identifiers.util'; import { validateFlatObjectMetadataLabel } from 'src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-label.util'; @@ -201,9 +201,9 @@ export class FlatObjectMetadataValidatorService { for (const flatFieldMetadataToValidate of flatObjectMetadataToValidate.flatFieldMetadatas) { const relationTargetFlatObjectMetadataMaps = - isRelationFlatFieldMetadata(flatFieldMetadataToValidate) && + isMorphOrRelationFlatFieldMetadata(flatFieldMetadataToValidate) && isDefined(otherFlatObjectMetadataMapsToValidate) - ? computeRelationTargetFlatObjectMetadataMaps({ + ? computeMorphOrRelationTargetFlatObjectMetadataMaps({ flatFieldMetadata: flatFieldMetadataToValidate, flatObjectMetadataMaps: otherFlatObjectMetadataMapsToValidate, }) diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-relation-target-flat-object-metadata-maps.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-morph-or-relation-target-flat-object-metadata-maps.util.ts similarity index 81% rename from packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-relation-target-flat-object-metadata-maps.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-morph-or-relation-target-flat-object-metadata-maps.util.ts index 5d2c10703c..26c6d73b00 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-relation-target-flat-object-metadata-maps.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-morph-or-relation-target-flat-object-metadata-maps.util.ts @@ -1,16 +1,16 @@ import { isDefined } from 'twenty-shared/utils'; -import { type RelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type'; +import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { findRelationFlatFieldMetadataTargetFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata.util'; import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type'; import { getSubFlatObjectMetadataMapsOutOfFlatFieldMetadatas } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/get-sub-flat-object-metadata-maps-out-of-flat-field-metadatas.util'; -export const computeRelationTargetFlatObjectMetadataMaps = ({ +export const computeMorphOrRelationTargetFlatObjectMetadataMaps = ({ flatFieldMetadata, flatObjectMetadataMaps, }: { - flatFieldMetadata: FlatFieldMetadata; + flatFieldMetadata: FlatFieldMetadata; flatObjectMetadataMaps: FlatObjectMetadataMaps; }): FlatObjectMetadataMaps | undefined => { const relationTargetFlatFieldMetadata = diff --git a/packages/twenty-server/src/engine/utils/is-morph-or-relation-field-metadata-type.util.ts b/packages/twenty-server/src/engine/utils/is-morph-or-relation-field-metadata-type.util.ts new file mode 100644 index 0000000000..6c579ba859 --- /dev/null +++ b/packages/twenty-server/src/engine/utils/is-morph-or-relation-field-metadata-type.util.ts @@ -0,0 +1,13 @@ +import { type FieldMetadataType } from 'twenty-shared/types'; + +import { + MORPH_OR_RELATION_FIELD_TYPES, + type MorphOrRelationFieldMetadataType, +} from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; +export const isMorphOrRelationFieldMetadataType = ( + type: FieldMetadataType, +): type is MorphOrRelationFieldMetadataType => { + return MORPH_OR_RELATION_FIELD_TYPES.includes( + type as MorphOrRelationFieldMetadataType, + ); +}; diff --git a/packages/twenty-server/src/engine/utils/is-relation-field-metadata-type.util.ts b/packages/twenty-server/src/engine/utils/is-relation-field-metadata-type.util.ts deleted file mode 100644 index 2f923214f6..0000000000 --- a/packages/twenty-server/src/engine/utils/is-relation-field-metadata-type.util.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type FieldMetadataType } from 'twenty-shared/types'; - -import { - RELATION_FIELD_TYPES, - type RelationFieldMetadataType, -} from 'src/engine/metadata-modules/field-metadata/types/relation-field-metadata-type.type'; -export const isRelationFieldMetadataType = ( - type: FieldMetadataType, -): type is RelationFieldMetadataType => { - return RELATION_FIELD_TYPES.includes(type as RelationFieldMetadataType); -}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-health/services/database-structure.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-health/services/database-structure.service.ts index 6e3edead47..4651892072 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-health/services/database-structure.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-health/services/database-structure.service.ts @@ -22,7 +22,7 @@ import { isFunctionDefaultValue } from 'src/engine/metadata-modules/field-metada import { serializeFunctionDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/serialize-function-default-value.util'; import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; @Injectable() export class DatabaseStructureService { @@ -207,7 +207,7 @@ export class DatabaseStructureService { return false; } - if (isRelationFieldMetadataType(type)) { + if (isMorphOrRelationFieldMetadataType(type)) { return false; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-health/services/field-metadata-health.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-health/services/field-metadata-health.service.ts index fd96c68447..6228875499 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-health/services/field-metadata-health.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-health/services/field-metadata-health.service.ts @@ -22,7 +22,7 @@ import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadat import { validateDefaultValueForType } from 'src/engine/metadata-modules/field-metadata/utils/validate-default-value-for-type.util'; import { validateOptionsForType } from 'src/engine/metadata-modules/field-metadata/utils/validate-options-for-type.util'; import { customNamePrefix } from 'src/engine/utils/compute-table-name.util'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; import { DatabaseStructureService } from 'src/engine/workspace-manager/workspace-health/services/database-structure.service'; import { validName } from 'src/engine/workspace-manager/workspace-health/utils/valid-name.util'; @@ -42,7 +42,7 @@ export class FieldMetadataHealthService { for (const fieldMetadata of fieldMetadataCollection) { // Relation metadata are checked in another service - if (isRelationFieldMetadataType(fieldMetadata.type)) { + if (isMorphOrRelationFieldMetadataType(fieldMetadata.type)) { continue; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/services/workspace-migration-v2-field-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/services/workspace-migration-v2-field-actions-builder.service.ts index 7675b859d1..0b477aab88 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/services/workspace-migration-v2-field-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/services/workspace-migration-v2-field-actions-builder.service.ts @@ -4,12 +4,12 @@ import { FromTo } from 'twenty-shared/types'; import { FlatFieldMetadataValidatorService } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service'; import { compareTwoFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util'; -import { isRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-relation-flat-field-metadata.util'; +import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; import { FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type'; import { addFlatFieldMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/add-flat-field-metadata-in-flat-object-metadata-maps-or-throw.util'; import { deleteFieldFromFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/delete-field-from-flat-object-metadata-maps-or-throw.util'; import { replaceFlatFieldMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/replace-flat-field-metadata-in-flat-object-metadata-maps-or-throw.util'; -import { computeRelationTargetFlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/compute-relation-target-flat-object-metadata-maps.util'; +import { computeMorphOrRelationTargetFlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/compute-morph-or-relation-target-flat-object-metadata-maps.util'; import { WorkspaceMigrationV2BuilderOptions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service'; import { ValidateAndBuildMetadataResult } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/validate-and-build-metadata-result.type'; import { type WorkspaceMigrationFieldActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; @@ -115,14 +115,13 @@ export class WorkspaceMigrationV2FieldActionsBuilderService { } for (const flatFieldMetadataToCreate of createdFlatFieldMetadatas) { - const relationTargetFlatObjectMetadataMaps = isRelationFlatFieldMetadata( - flatFieldMetadataToCreate, - ) - ? computeRelationTargetFlatObjectMetadataMaps({ - flatFieldMetadata: flatFieldMetadataToCreate, - flatObjectMetadataMaps: toFlatObjectMetadataMaps, - }) - : undefined; + const relationTargetFlatObjectMetadataMaps = + isMorphOrRelationFlatFieldMetadata(flatFieldMetadataToCreate) + ? computeMorphOrRelationTargetFlatObjectMetadataMaps({ + flatFieldMetadata: flatFieldMetadataToCreate, + flatObjectMetadataMaps: toFlatObjectMetadataMaps, + }) + : undefined; const validationErrors = await this.flatFieldMetadataValidatorService.validateFlatFieldMetadataCreation( diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts index c8a4bdd5b1..bad3202792 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts @@ -13,14 +13,14 @@ import { FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-module import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util'; import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util'; -import { isRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-relation-flat-field-metadata.util'; +import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; import { findFlatFieldMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/find-flat-field-metadata-in-flat-object-metadata-maps-or-throw.util'; import { findFlatObjectMetadataWithFlatFieldMapsInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/find-flat-object-metadata-with-flat-field-maps-in-flat-object-metadata-maps-or-throw.util'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { fromFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/utils/from-flat-object-metadata-with-flat-field-maps-to-flat-object-metadatas.util'; import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; -import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; +import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; import { FlatFieldMetadataPropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-field-metadata-property-update.type'; import { type UpdateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; import { serializeDefaultValueV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/serialize-default-value-v2.util'; @@ -154,7 +154,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct const compositeType = getCompositeTypeOrThrow(flatFieldMetadata.type); for (const property of compositeType.properties) { - if (isRelationFieldMetadataType(property.type)) { + if (isMorphOrRelationFieldMetadataType(property.type)) { throw new WorkspaceMigrationRunnerException( 'Relation field metadata in composite type is not supported yet', WorkspaceMigrationRunnerExceptionCode.NOT_SUPPORTED, @@ -179,7 +179,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct }); } } else { - if (isRelationFlatFieldMetadata(flatFieldMetadata)) { + if (isMorphOrRelationFlatFieldMetadata(flatFieldMetadata)) { throw new WorkspaceMigrationRunnerException( 'Relation field metadata name update is not supported yet', WorkspaceMigrationRunnerExceptionCode.NOT_SUPPORTED, @@ -226,7 +226,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct const compositeType = getCompositeTypeOrThrow(flatFieldMetadata.type); for (const property of compositeType.properties) { - if (isRelationFieldMetadataType(property.type)) { + if (isMorphOrRelationFieldMetadataType(property.type)) { throw new WorkspaceMigrationRunnerException( 'Relation field metadata in composite type is not supported yet', WorkspaceMigrationRunnerExceptionCode.NOT_SUPPORTED,