Files
twenty/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/utils/get-relation-object-metadata.util.ts

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 { ObjectMetadataMap } from 'src/engine/metadata-modules/utils/generate-object-metadata-map.util';
import {
deduceRelationDirection,
RelationDirection,
} from 'src/engine/utils/deduce-relation-direction.util';
export const getRelationObjectMetadata = (
fieldMetadata: FieldMetadataInterface,
objectMetadataMap: ObjectMetadataMap,
) => {
const relationMetadata = getRelationMetadata(fieldMetadata);
const relationDirection = deduceRelationDirection(
fieldMetadata,
relationMetadata,
);
const referencedObjectMetadata =
relationDirection === RelationDirection.TO
? objectMetadataMap[relationMetadata.fromObjectMetadataId]
: objectMetadataMap[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;
};