twenty / packages /twenty-server /src /engine /twenty-orm /utils /get-object-metadata-from-entity-target.util.ts
Jules
Initial clean CRM deployment with prebuilt assets
d9494a5
Raw
History Blame Contribute Delete
1.87 kB
import { type EntityTarget, type ObjectLiteral } from 'typeorm';
import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import {
TwentyORMException,
TwentyORMExceptionCode,
} from 'src/engine/twenty-orm/exceptions/twenty-orm.exception';
export const getObjectMetadataFromEntityTarget = <T extends ObjectLiteral>(
entityTarget: EntityTarget<T>,
internalContext: WorkspaceInternalContext,
): FlatObjectMetadata => {
if (typeof entityTarget !== 'string') {
throw new TwentyORMException(
'Entity target must be a string',
TwentyORMExceptionCode.MALFORMED_METADATA,
);
}
const objectMetadataName = entityTarget;
const objectMetadataId =
internalContext.objectIdByNameSingular[objectMetadataName];
if (!objectMetadataId) {
throw new TwentyORMException(
`Object metadata for object "${objectMetadataName}" is missing ` +
`in workspace "${internalContext.workspaceId}" ` +
`with object metadata collection length: ${
Object.keys(internalContext.objectIdByNameSingular).length
}`,
TwentyORMExceptionCode.MALFORMED_METADATA,
);
}
const objectMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: objectMetadataId,
flatEntityMaps: internalContext.flatObjectMetadataMaps,
});
if (!objectMetadata) {
throw new TwentyORMException(
`Object metadata for object "${objectMetadataName}" (id: ${objectMetadataId}) is missing`,
TwentyORMExceptionCode.MALFORMED_METADATA,
);
}
return objectMetadata;
};