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
@@ -0,0 +1,6 @@
import { FlatObjectMetadataWithFlatFieldMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-with-flat-field-metadata-maps.type';
export type FlatObjectMetadataMaps = {
byId: Partial<Record<string, FlatObjectMetadataWithFlatFieldMaps>>;
idByNameSingular: Partial<Record<string, string>>;
};
@@ -0,0 +1,11 @@
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
export type FlatFieldMetadataMaps = {
fieldsById: Partial<Record<string, FlatFieldMetadata>>;
fieldIdByJoinColumnName: Partial<Record<string, string>>;
fieldIdByName: Partial<Record<string, string>>;
};
export type FlatObjectMetadataWithFlatFieldMaps = FlatObjectMetadata &
FlatFieldMetadataMaps;
@@ -0,0 +1,42 @@
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { FlatObjectMetadataWithFlatFieldMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-with-flat-field-metadata-maps.type';
import { fromObjectMetadataItemWithFieldMapsToFlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/utils/from-object-metadata-item-with-field-maps-to-flat-object-metadata.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
type FromObjectMetadataItemWithFieldMapsToFlatObjectWithFlatFieldMetadataMapsArgs =
{
objectMetadataItemWithFieldMaps: ObjectMetadataItemWithFieldMaps;
objectMetadataMaps: ObjectMetadataMaps;
};
export const fromObjectMetadataItemWithFieldMapsToFlatObjectWithFlatFieldMetadataMaps =
({
objectMetadataItemWithFieldMaps,
objectMetadataMaps,
}: FromObjectMetadataItemWithFieldMapsToFlatObjectWithFlatFieldMetadataMapsArgs): FlatObjectMetadataWithFlatFieldMaps => {
const flatObjectMetadata =
fromObjectMetadataItemWithFieldMapsToFlatObjectMetadata({
objectMetadataItemWithFieldMaps,
objectMetadataMaps,
});
const initialAccumulator: Record<string, FlatFieldMetadata> = {};
const fieldsById = flatObjectMetadata.flatFieldMetadatas.reduce(
(acc, flatFieldMetadata) => ({
...acc,
[flatFieldMetadata.id]: flatFieldMetadata,
}),
initialAccumulator,
);
const { fieldIdByJoinColumnName, fieldIdByName } =
objectMetadataItemWithFieldMaps;
return {
...flatObjectMetadata,
fieldsById,
fieldIdByJoinColumnName,
fieldIdByName,
};
};
@@ -0,0 +1,30 @@
import { isDefined } from 'twenty-shared/utils';
import { FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
import { fromObjectMetadataItemWithFieldMapsToFlatObjectWithFlatFieldMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/from-flat-field-metadata-to-flat-field-metadata-maps.util';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
export const fromObjectMetadataMapsToFlatObjectMetadataMaps = (
objectMetadataMaps: ObjectMetadataMaps,
): FlatObjectMetadataMaps => {
const initialAccumulator: FlatObjectMetadataMaps['byId'] = {};
const byId = Object.values(objectMetadataMaps.byId)
.filter(isDefined)
.reduce((acc, objectMetadataItemWithFieldMaps) => {
const { id: objectMetadataId } = objectMetadataItemWithFieldMaps;
return {
...acc,
[objectMetadataId]:
fromObjectMetadataItemWithFieldMapsToFlatObjectWithFlatFieldMetadataMaps(
{ objectMetadataItemWithFieldMaps, objectMetadataMaps },
),
};
}, initialAccumulator);
return {
idByNameSingular: objectMetadataMaps.idByNameSingular,
byId,
};
};