FlatObjectMetadataMaps and non FP style refactor (#13590)

# Introduction
- Retrieveing flat-object-metadata-maps for input transpilation, we
decided not to introduce map merge for remaining validation operation
for the moment
- Refactored the field metadata service v2 to sequentially
optimistically render on each iteration
This commit is contained in:
Paul Rastoin
2025-08-05 10:46:28 +02:00
committed by GitHub
parent ca9464e19d
commit 6af99ab1ea
14 changed files with 316 additions and 94 deletions
@@ -18,16 +18,16 @@ import { generateRatingOptions } from 'src/engine/metadata-modules/field-metadat
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { fromRelationCreateFieldInputToFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadata.util';
import { getDefaultFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util';
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import { FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
type FromCreateFieldInputToFlatObjectMetadata = {
rawCreateFieldInput: CreateFieldInput;
existingFlatObjectMetadatas: FlatObjectMetadata[];
existingFlatObjectMetadataMaps: FlatObjectMetadataMaps;
};
export const fromCreateFieldInputToFlatFieldAndItsFlatObjectMetadata = async ({
existingFlatObjectMetadatas,
rawCreateFieldInput,
existingFlatObjectMetadataMaps,
}: FromCreateFieldInputToFlatObjectMetadata): Promise<FlatFieldMetadata[]> => {
if (rawCreateFieldInput.isRemoteCreation) {
throw new FieldMetadataException(
@@ -40,10 +40,8 @@ export const fromCreateFieldInputToFlatFieldAndItsFlatObjectMetadata = async ({
rawCreateFieldInput,
['description', 'icon', 'label', 'name', 'objectMetadataId', 'type'],
);
const parentFlatObjectMetadata = existingFlatObjectMetadatas.find(
(existingFlatObjectMetadata) =>
existingFlatObjectMetadata.id === createFieldInput.objectMetadataId,
);
const parentFlatObjectMetadata =
existingFlatObjectMetadataMaps.byId[createFieldInput.objectMetadataId];
if (!isDefined(parentFlatObjectMetadata)) {
throw new FieldMetadataException(
@@ -70,7 +68,7 @@ export const fromCreateFieldInputToFlatFieldAndItsFlatObjectMetadata = async ({
}
case FieldMetadataType.RELATION: {
return fromRelationCreateFieldInputToFlatFieldMetadata({
existingFlatObjectMetadatas,
existingFlatObjectMetadataMaps,
sourceParentFlatObjectMetadata: parentFlatObjectMetadata,
createFieldInput,
});
@@ -12,6 +12,7 @@ import {
import { validateRelationCreationPayloadOrThrow } from 'src/engine/metadata-modules/field-metadata/utils/validate-relation-creation-payload.util';
import { 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';
import { FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import { RelationOnDeleteAction } from 'src/engine/metadata-modules/relation-metadata/relation-on-delete-action.type';
import { computeMetadataNameFromLabel } from 'src/engine/metadata-modules/utils/validate-name-and-label-are-sync-or-throw.util';
@@ -39,11 +40,11 @@ const computeFieldMetadataRelationSettingsForRelationType = ({
type FromRelationCreateFieldInputToFlatFieldMetadataArgs = {
createFieldInput: CreateFieldInput;
existingFlatObjectMetadatas: FlatObjectMetadata[];
existingFlatObjectMetadataMaps: FlatObjectMetadataMaps;
sourceParentFlatObjectMetadata: FlatObjectMetadata;
};
export const fromRelationCreateFieldInputToFlatFieldMetadata = async ({
existingFlatObjectMetadatas,
existingFlatObjectMetadataMaps,
sourceParentFlatObjectMetadata,
createFieldInput,
}: FromRelationCreateFieldInputToFlatFieldMetadataArgs): Promise<
@@ -59,10 +60,10 @@ export const fromRelationCreateFieldInputToFlatFieldMetadata = async ({
}
await validateRelationCreationPayloadOrThrow(relationCreationPayload);
const targetParentFlatObjectMetadata = existingFlatObjectMetadatas.find(
(existingFlatObject) =>
existingFlatObject.id === relationCreationPayload.targetObjectMetadataId,
);
const targetParentFlatObjectMetadata =
existingFlatObjectMetadataMaps.byId[
relationCreationPayload.targetObjectMetadataId
];
if (!isDefined(targetParentFlatObjectMetadata)) {
throw new FieldMetadataException(
@@ -0,0 +1,19 @@
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { mergeTwoFlatFieldMetadatas } from 'src/engine/metadata-modules/flat-field-metadata/utils/merge-two-flat-field-metadatas.util';
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
export const mergeFlatFieldMetadatasInFlatObjectMetadata = ({
flatFieldMetadatas,
flatObjectMetadata,
}: {
flatObjectMetadata: FlatObjectMetadata;
flatFieldMetadatas: FlatFieldMetadata[];
}) => {
return {
...flatObjectMetadata,
flatFieldMetadatas: mergeTwoFlatFieldMetadatas({
destFlatFieldMetadatas: flatObjectMetadata.flatFieldMetadatas,
toMergeFlatFieldMetadatas: flatFieldMetadatas,
}),
};
};