RelationFieldMetadataType to MorphOrRelationFieldMetadataType and so on (#14160)

This commit is contained in:
Paul Rastoin
2025-08-29 17:25:12 +02:00
committed by GitHub
parent a2296c02ec
commit 7df9094939
25 changed files with 110 additions and 106 deletions
@@ -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,
)
@@ -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<RelationFieldMetadataType>[] => {
}: FindFlatFieldMetadatasRelatedToMorphRelationOrThrowArgs): FlatFieldMetadata<MorphOrRelationFieldMetadataType>[] => {
const flatObjectMetadataWithFlatFieldMaps =
flatObjectMetadataMaps.byId[
morphRelationFlatFieldMetadata.objectMetadataId
@@ -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<RelationFieldMetadataType>;
flatFieldMetadata: FlatFieldMetadata<MorphOrRelationFieldMetadataType>;
};
export const findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow = ({
@@ -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<FlatFieldMetadata[]>
FieldInputTranspilationResult<
FlatFieldMetadata<MorphOrRelationFieldMetadataType>[]
>
> => {
const rawMorphCreationPayload =
createFieldInput.morphRelationsCreationPayload;
@@ -70,7 +73,7 @@ export const fromMorphRelationCreateFieldInputToFlatFieldMetadatas = async ({
targetFlatObjectMetadata.nameSingular,
});
return generateRelationOrMorphRelationFlatFieldMetadataPair({
return generateMorphOrRelationFlatFieldMetadataPair({
createFieldInput: {
...createFieldInput,
relationCreationPayload,
@@ -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<FlatFieldMetadata<RelationFieldMetadataType>[]>
FieldInputTranspilationResult<FlatFieldMetadata<FieldMetadataType.RELATION>[]>
> => {
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<FieldMetadataType.RELATION>[],
};
};
@@ -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<CreateFieldInput, 'workspaceId'> &
Required<
Pick<CreateFieldInput, 'relationCreationPayload' | 'type' | 'name'>
> & { type: RelationFieldMetadataType };
> & { type: MorphOrRelationFieldMetadataType };
workspaceId: string;
};
export const generateRelationOrMorphRelationFlatFieldMetadataPair = ({
export const generateMorphOrRelationFlatFieldMetadataPair = ({
createFieldInput,
sourceFlatObjectMetadata,
targetFlatObjectMetadata,
workspaceId,
sourceFlatObjectMetadataJoinColumnName,
}: GenerateRelationOrMorphRelationFlatFieldMetadataPairArgs): FlatFieldMetadata<RelationFieldMetadataType>[] => {
}: GenerateMorphOrRelationFlatFieldMetadataPairArgs): FlatFieldMetadata<MorphOrRelationFieldMetadataType>[] => {
const { relationCreationPayload } = createFieldInput;
const sourceFlatFieldMetadataSettings =
@@ -58,7 +58,7 @@ export const generateRelationOrMorphRelationFlatFieldMetadataPair = ({
const targetRelationTargetFieldMetadataId = v4();
const sourceRelationTargetFieldMetadataId = v4();
const sourceFlatFieldMetadata: Omit<
FlatFieldMetadata<RelationFieldMetadataType>,
FlatFieldMetadata<MorphOrRelationFieldMetadataType>,
'flatRelationTargetFieldMetadata'
> = {
...getDefaultFlatFieldMetadata({
@@ -120,5 +120,5 @@ export const generateRelationOrMorphRelationFlatFieldMetadataPair = ({
flatRelationTargetFieldMetadata: targetFlatFieldMetadata,
},
targetFlatFieldMetadata,
] satisfies FlatFieldMetadata<RelationFieldMetadataType>[];
] satisfies FlatFieldMetadata<MorphOrRelationFieldMetadataType>[];
};
@@ -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<RelationFieldMetadataType> =>
): flatFieldMetadata is FlatFieldMetadata<MorphOrRelationFieldMetadataType> =>
isFlatFieldMetadataEntityOfTypes(flatFieldMetadata, [
...RELATION_FIELD_TYPES,
...MORPH_OR_RELATION_FIELD_TYPES,
]);