Files
twenty/packages/twenty-server/src/engine/metadata-modules/utils/generate-object-metadata-maps.util.ts
Marie a799370483 Aggregated queries #1 (#8345)
First step of https://github.com/twentyhq/twenty/issues/6868

Adds min.., max.. queries for DATETIME fields
adds min.., max.., avg.., sum.. queries for NUMBER fields 

(count distinct operation and composite fields such as CURRENCY handling
will be dealt with in a future PR)

<img width="1422" alt="Capture d’écran 2024-11-06 à 15 48 46"
src="https://github.com/user-attachments/assets/4bcdece0-ad3e-4536-9720-fe4044a36719">

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
Co-authored-by: Weiko <corentin@twenty.com>
2024-11-14 18:05:05 +01:00

40 lines
1.5 KiB
TypeScript

import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
import { FieldMetadataMap } from 'src/engine/metadata-modules/types/field-metadata-map';
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';
export const generateObjectMetadataMaps = (
objectMetadataCollection: ObjectMetadataInterface[],
): ObjectMetadataMaps => {
const objectMetadataMaps: ObjectMetadataMaps = {
byId: {},
byNameSingular: {},
byNamePlural: {},
};
for (const objectMetadata of objectMetadataCollection) {
const fieldsByIdMap: FieldMetadataMap = {};
const fieldsByNameMap: FieldMetadataMap = {};
for (const fieldMetadata of objectMetadata.fields) {
fieldsByNameMap[fieldMetadata.name] = fieldMetadata;
fieldsByIdMap[fieldMetadata.id] = fieldMetadata;
}
const processedObjectMetadata: ObjectMetadataItemWithFieldMaps = {
...objectMetadata,
fieldsById: fieldsByIdMap,
fieldsByName: fieldsByNameMap,
};
objectMetadataMaps.byId[objectMetadata.id] = processedObjectMetadata;
objectMetadataMaps.byNameSingular[objectMetadata.nameSingular] =
processedObjectMetadata;
objectMetadataMaps.byNamePlural[objectMetadata.namePlural] =
processedObjectMetadata;
}
return objectMetadataMaps;
};