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>
49 lines
1.5 KiB
TypeScript
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;
|
|
};
|