Files
twenty/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/utils/get-relation-object-metadata.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

49 lines
1.5 KiB
TypeScript

import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
import {
deduceRelationDirection,
RelationDirection,
} from 'src/engine/utils/deduce-relation-direction.util';
export const getRelationObjectMetadata = (
fieldMetadata: FieldMetadataInterface,
objectMetadataMaps: ObjectMetadataMaps,
) => {
const relationMetadata = getRelationMetadata(fieldMetadata);
const relationDirection = deduceRelationDirection(
fieldMetadata,
relationMetadata,
);
const referencedObjectMetadata =
relationDirection === RelationDirection.TO
? objectMetadataMaps.byId[relationMetadata.fromObjectMetadataId]
: objectMetadataMaps.byId[relationMetadata.toObjectMetadataId];
if (!referencedObjectMetadata) {
throw new Error(
`Referenced object metadata not found for relation ${relationMetadata.id}`,
);
}
return referencedObjectMetadata;
};
export const getRelationMetadata = (
fieldMetadata: FieldMetadataInterface,
): RelationMetadataEntity => {
const relationMetadata =
fieldMetadata.fromRelationMetadata ?? fieldMetadata.toRelationMetadata;
if (!relationMetadata) {
throw new Error(
`Relation metadata not found for field ${fieldMetadata.name}`,
);
}
return relationMetadata;
};