Refactor flat entity maps to be universal oriented (#17665)

# Introduction
In preparation of the workspace agnostic builder, we're migrating
`FlatEntityMaps` to be universal identifier oriented and based
As in the builder context there're won't be any ids at all
Please also note that the FlatEntity is a UniversalFlatEntity superset

From
```ts
import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-from.type';

export type FlatEntityMaps<T extends SyncableFlatEntity> = {
  byId: Partial<Record<string, T>>;
  idByUniversalIdentifier: Partial<Record<string, string>>;
  universalIdentifiersByApplicationId: Partial<Record<string, string[]>>;
};
```

To
```ts
export type FlatEntityMaps<
  T extends SyncableFlatEntity | UniversalSyncableFlatEntity,
> = {
  byUniversalIdentifier: Partial<Record<string, T>>;
  universalIdentifierById: Partial<Record<string, string>>;
  universalIdentifiersByApplicationId: Partial<Record<string, string[]>>; // this might make more sense to be migrated to universalIdentifiersByApplicationUniversalIdentifier but it's the main topic of this PR
};
```

## Low level maps tools
Had to refactor find | create | delete | replace | find-many | get-sub
tools ( through mutations and or throw equivalent )
This commit is contained in:
Paul Rastoin
2026-02-03 17:16:02 +01:00
committed by GitHub
parent 43042d55b2
commit 476bdf764c
202 changed files with 1853 additions and 909 deletions
@@ -179,20 +179,20 @@ describe('WorkspaceEntityManager', () => {
};
const flatObjectMetadataMaps: FlatEntityMaps<FlatObjectMetadata> = {
byId: {
byUniversalIdentifier: {
'test-entity-id': mockFlatObjectMetadata,
},
idByUniversalIdentifier: {
universalIdentifierById: {
'test-entity-id': 'test-entity-id',
},
universalIdentifiersByApplicationId: {},
};
const flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata> = {
byId: {
byUniversalIdentifier: {
'field-id': mockFlatFieldMetadata,
},
idByUniversalIdentifier: {
universalIdentifierById: {
'field-id': 'field-id',
},
universalIdentifiersByApplicationId: {},
@@ -203,18 +203,18 @@ describe('WorkspaceEntityManager', () => {
flatObjectMetadataMaps,
flatFieldMetadataMaps,
flatIndexMaps: {
byId: {},
idByUniversalIdentifier: {},
byUniversalIdentifier: {},
universalIdentifierById: {},
universalIdentifiersByApplicationId: {},
},
flatRowLevelPermissionPredicateMaps: {
byId: {},
idByUniversalIdentifier: {},
byUniversalIdentifier: {},
universalIdentifierById: {},
universalIdentifiersByApplicationId: {},
},
flatRowLevelPermissionPredicateGroupMaps: {
byId: {},
idByUniversalIdentifier: {},
byUniversalIdentifier: {},
universalIdentifierById: {},
universalIdentifiersByApplicationId: {},
},
objectIdByNameSingular: {
@@ -36,10 +36,11 @@ import { InstanceChecker } from 'typeorm/util/InstanceChecker';
import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface';
import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface';
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
import { InternalServerError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
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 {
PermissionsException,
@@ -1390,8 +1391,10 @@ export class WorkspaceEntityManager extends EntityManager {
Object.entries(restrictedFields)
.filter(([_, fieldPermissions]) => fieldPermissions.canRead === false)
.map(([fieldMetadataId]) => {
const fieldMetadata =
this.internalContext.flatFieldMetadataMaps.byId[fieldMetadataId];
const fieldMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: fieldMetadataId,
flatEntityMaps: this.internalContext.flatFieldMetadataMaps,
});
if (!isDefined(fieldMetadata)) {
throw new InternalServerError(
@@ -19,6 +19,7 @@ import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/
import { STANDARD_ERROR_MESSAGE } from 'src/engine/api/common/common-query-runners/errors/standard-error-message.constant';
import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util';
import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import {
TwentyORMException,
@@ -597,8 +598,10 @@ export class FilesFieldSync {
}
private getFilesFields(objectMetadataId: string): FlatFieldMetadata[] {
const objectMetadata =
this.internalContext.flatObjectMetadataMaps.byId[objectMetadataId];
const objectMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: objectMetadataId,
flatEntityMaps: this.internalContext.flatObjectMetadataMaps,
});
if (!objectMetadata) {
return [];
@@ -111,30 +111,32 @@ describe('WorkspaceRepository', () => {
mockInternalContext = {
workspaceId: 'test-workspace-id',
flatObjectMetadataMaps: {
byId: {},
idByUniversalIdentifier: {},
byUniversalIdentifier: {},
universalIdentifierById: {},
universalIdentifiersByApplicationId: {},
},
flatFieldMetadataMaps: {
byId: {
'test-field-id': mockFieldMetadata,
byUniversalIdentifier: {
'id-field-universal-id': mockFieldMetadata,
},
universalIdentifierById: {
'test-field-id': 'id-field-universal-id',
},
idByUniversalIdentifier: {},
universalIdentifiersByApplicationId: {},
},
flatIndexMaps: {
byId: {},
idByUniversalIdentifier: {},
byUniversalIdentifier: {},
universalIdentifierById: {},
universalIdentifiersByApplicationId: {},
},
flatRowLevelPermissionPredicateMaps: {
byId: {},
idByUniversalIdentifier: {},
byUniversalIdentifier: {},
universalIdentifierById: {},
universalIdentifiersByApplicationId: {},
},
flatRowLevelPermissionPredicateGroupMaps: {
byId: {},
idByUniversalIdentifier: {},
byUniversalIdentifier: {},
universalIdentifierById: {},
universalIdentifiersByApplicationId: {},
},
objectIdByNameSingular: {},
@@ -10,6 +10,7 @@ import { type QueryExpressionMap } from 'typeorm/query-builder/QueryExpressionMa
import { ProcessAggregateHelper } from 'src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper';
import { InternalServerError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import {
@@ -96,7 +97,10 @@ export const validateOperationIsPermittedOrThrow = ({
);
}
const objectMetadata = flatObjectMetadataMaps.byId[objectMetadataIdForEntity];
const objectMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: objectMetadataIdForEntity,
flatEntityMaps: flatObjectMetadataMaps,
});
if (!isDefined(objectMetadata)) {
throw new PermissionsException(
@@ -183,17 +183,17 @@ describe('computeRelationConnectQueryConfigs', () => {
const allFields = [...personFields, ...companyFields];
const flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata> = {
byId: allFields.reduce(
byUniversalIdentifier: allFields.reduce(
(acc, field) => {
acc[field.id] = field;
acc[field.universalIdentifier] = field;
return acc;
},
{} as Record<string, FlatFieldMetadata>,
),
idByUniversalIdentifier: allFields.reduce(
universalIdentifierById: allFields.reduce(
(acc, field) => {
acc[field.universalIdentifier] = field.id;
acc[field.id] = field.universalIdentifier;
return acc;
},
@@ -258,11 +258,11 @@ describe('computeRelationConnectQueryConfigs', () => {
});
const flatObjectMetadataMaps: FlatEntityMaps<FlatObjectMetadata> = {
byId: {
byUniversalIdentifier: {
'person-object-metadata-id': personMetadata,
'company-object-metadata-id': companyMetadata,
},
idByUniversalIdentifier: {
universalIdentifierById: {
'person-object-metadata-id': 'person-object-metadata-id',
'company-object-metadata-id': 'company-object-metadata-id',
},
@@ -284,7 +284,7 @@ describe('computeRelationConnectQueryConfigs', () => {
});
const flatIndexMaps: FlatEntityMaps<FlatIndexMetadata> = {
byId: {
byUniversalIdentifier: {
'company-id-index-metadata-id': {
id: 'company-id-index-metadata-id',
name: 'company-id-index-metadata-name',
@@ -337,7 +337,7 @@ describe('computeRelationConnectQueryConfigs', () => {
],
} as unknown as FlatIndexMetadata,
},
idByUniversalIdentifier: {
universalIdentifierById: {
'company-id-index-metadata-id': 'company-id-index-metadata-id',
'company-domain-index-metadata-id': 'company-domain-index-metadata-id',
'company-composite-index-metadata-id':
@@ -48,10 +48,10 @@ describe('formatTwentyOrmEventToDatabaseBatchEvent', () => {
});
const flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata> = {
byId: {
byUniversalIdentifier: {
'name-id': nameField,
},
idByUniversalIdentifier: {
universalIdentifierById: {
'name-id': 'name-id',
},
universalIdentifiersByApplicationId: {},
@@ -75,17 +75,17 @@ describe('getColumnNameToFieldMetadataIdMap', () => {
const buildFlatFieldMetadataMaps = (
fields: FlatFieldMetadata[],
): FlatEntityMaps<FlatFieldMetadata> => ({
byId: fields.reduce(
byUniversalIdentifier: fields.reduce(
(acc, field) => {
acc[field.id] = field;
acc[field.universalIdentifier] = field;
return acc;
},
{} as Record<string, FlatFieldMetadata>,
),
idByUniversalIdentifier: fields.reduce(
universalIdentifierById: fields.reduce(
(acc, field) => {
acc[field.universalIdentifier] = field.id;
acc[field.id] = field.universalIdentifier;
return acc;
},
@@ -73,17 +73,17 @@ describe('getFieldMetadataIdToColumnNamesMap', () => {
const buildFlatFieldMetadataMaps = (
fields: FlatFieldMetadata[],
): FlatEntityMaps<FlatFieldMetadata> => ({
byId: fields.reduce(
byUniversalIdentifier: fields.reduce(
(acc, field) => {
acc[field.id] = field;
acc[field.universalIdentifier] = field;
return acc;
},
{} as Record<string, FlatFieldMetadata>,
),
idByUniversalIdentifier: fields.reduce(
universalIdentifierById: fields.reduce(
(acc, field) => {
acc[field.universalIdentifier] = field.id;
acc[field.id] = field.universalIdentifier;
return acc;
},
@@ -75,17 +75,17 @@ describe('isRecordMatchingRLSRowLevelPermissionPredicate', () => {
const buildFlatFieldMetadataMaps = (
fields: FlatFieldMetadata[],
): FlatEntityMaps<FlatFieldMetadata> => ({
byId: fields.reduce(
byUniversalIdentifier: fields.reduce(
(accumulator, field) => {
accumulator[field.id] = field;
accumulator[field.universalIdentifier] = field;
return accumulator;
},
{} as Record<string, FlatFieldMetadata>,
),
idByUniversalIdentifier: fields.reduce(
universalIdentifierById: fields.reduce(
(accumulator, field) => {
accumulator[field.universalIdentifier] = field.id;
accumulator[field.id] = field.universalIdentifier;
return accumulator;
},
@@ -21,6 +21,7 @@ import {
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import {
@@ -52,7 +53,9 @@ export const buildRowLevelPermissionRecordFilter = ({
return null;
}
const predicates = Object.values(flatRowLevelPermissionPredicateMaps.byId)
const predicates = Object.values(
flatRowLevelPermissionPredicateMaps.byUniversalIdentifier,
)
.filter(isDefined)
.filter(
(predicate) =>
@@ -65,13 +68,14 @@ export const buildRowLevelPermissionRecordFilter = ({
return null;
}
const fieldMetadataMapById = flatFieldMetadataMaps.byId;
const workspaceMember = authContext.workspaceMember;
const recordFilters = predicates
.map((predicate) => {
const fieldMetadata = fieldMetadataMapById[predicate.fieldMetadataId];
const fieldMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: predicate.fieldMetadataId,
flatEntityMaps: flatFieldMetadataMaps,
});
if (!isDefined(fieldMetadata)) {
throw new PermissionsException(
@@ -85,8 +89,12 @@ export const buildRowLevelPermissionRecordFilter = ({
let predicateValue: RowLevelPermissionPredicateValue = predicate.value;
if (isDefined(workspaceMemberFieldMetadataId)) {
const workspaceMemberFieldMetadata =
fieldMetadataMapById[workspaceMemberFieldMetadataId];
const workspaceMemberFieldMetadata = findFlatEntityByIdInFlatEntityMaps(
{
flatEntityId: workspaceMemberFieldMetadataId,
flatEntityMaps: flatFieldMetadataMaps,
},
);
if (!isDefined(workspaceMemberFieldMetadata)) {
throw new PermissionsException(
@@ -162,29 +170,34 @@ export const buildRowLevelPermissionRecordFilter = ({
})
.filter(isDefined);
const predicateGroupsById = flatRowLevelPermissionPredicateGroupMaps.byId;
const relevantGroupIds = new Set<string>();
for (const predicate of predicates) {
if (isDefined(predicate.rowLevelPermissionPredicateGroupId)) {
relevantGroupIds.add(predicate.rowLevelPermissionPredicateGroupId);
let parentGroupId =
predicateGroupsById[predicate.rowLevelPermissionPredicateGroupId]
?.parentRowLevelPermissionPredicateGroupId;
let parentGroupId = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: predicate.rowLevelPermissionPredicateGroupId,
flatEntityMaps: flatRowLevelPermissionPredicateGroupMaps,
})?.parentRowLevelPermissionPredicateGroupId;
while (isDefined(parentGroupId) && !relevantGroupIds.has(parentGroupId)) {
relevantGroupIds.add(parentGroupId);
parentGroupId =
predicateGroupsById[parentGroupId]
?.parentRowLevelPermissionPredicateGroupId;
parentGroupId = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: parentGroupId,
flatEntityMaps: flatRowLevelPermissionPredicateGroupMaps,
})?.parentRowLevelPermissionPredicateGroupId;
}
}
}
const recordFilterGroups: RecordFilterGroup[] = [...relevantGroupIds]
.map((groupId) => predicateGroupsById[groupId])
.map((groupId) =>
findFlatEntityByIdInFlatEntityMaps({
flatEntityId: groupId,
flatEntityMaps: flatRowLevelPermissionPredicateGroupMaps,
}),
)
.filter(isDefined)
.filter(
(predicateGroup) =>
@@ -203,7 +216,12 @@ export const buildRowLevelPermissionRecordFilter = ({
}));
const fieldMetadataItems = predicates
.map((predicate) => fieldMetadataMapById[predicate.fieldMetadataId])
.map((predicate) =>
findFlatEntityByIdInFlatEntityMaps({
flatEntityId: predicate.fieldMetadataId,
flatEntityMaps: flatFieldMetadataMaps,
}),
)
.filter(isDefined)
.map((field) => ({
id: field.id,
@@ -8,6 +8,8 @@ import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfa
import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { findManyFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps.util';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import {
buildFieldMapsFromFlatObjectMetadata,
@@ -147,8 +149,10 @@ const computeRecordToConnectCondition = (
uniqueConstraintFields: FlatFieldMetadata<FieldMetadataType>[];
targetObjectNameSingular: string;
} => {
const field =
flatFieldMetadataMaps.byId[fieldMaps.fieldIdByName[connectFieldName]];
const field = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: fieldMaps.fieldIdByName[connectFieldName],
flatEntityMaps: flatFieldMetadataMaps,
});
if (
!isDefined(field) ||
@@ -168,8 +172,12 @@ const computeRecordToConnectCondition = (
}
checkNoRelationFieldConflictOrThrow(entity, connectFieldName);
const targetObjectMetadata =
flatObjectMetadataMaps.byId[field.relationTargetObjectMetadataId || ''];
const targetObjectMetadata = field.relationTargetObjectMetadataId
? findFlatEntityByIdInFlatEntityMaps({
flatEntityId: field.relationTargetObjectMetadataId,
flatEntityMaps: flatObjectMetadataMaps,
})
: undefined;
if (!isDefined(targetObjectMetadata)) {
throw new TwentyORMException(
@@ -211,18 +219,16 @@ const checkUniqueConstraintFullyPopulated = (
flatFieldMetadataMaps,
);
const indexMetadatas = flatObjectMetadata.indexMetadataIds
.map((indexId) => flatIndexMaps.byId[indexId])
.filter(isDefined)
.map((index) => ({
id: index.id,
isUnique: index.isUnique,
indexFieldMetadatas: index.flatIndexFieldMetadatas.map(
(fieldMetadata) => ({
fieldMetadataId: fieldMetadata.fieldMetadataId,
}),
),
}));
const indexMetadatas = findManyFlatEntityByIdInFlatEntityMaps({
flatEntityIds: flatObjectMetadata.indexMetadataIds,
flatEntityMaps: flatIndexMaps,
}).map((index) => ({
id: index.id,
isUnique: index.isUnique,
indexFieldMetadatas: index.flatIndexFieldMetadatas.map((fieldMetadata) => ({
fieldMetadataId: fieldMetadata.fieldMetadataId,
})),
}));
const uniqueConstraintsFields = getUniqueConstraintsFields<
FlatFieldMetadata,
@@ -7,6 +7,7 @@ import { capitalize } from 'twenty-shared/utils';
import { type CompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/composite-field-metadata-type.type';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import {
buildFieldMapsFromFlatObjectMetadata,
@@ -45,7 +46,10 @@ export function formatData<T>(
for (const [key, value] of Object.entries(data)) {
const fieldMetadataId = fieldIdByName[key] || fieldIdByJoinColumnName[key];
const fieldMetadata = flatFieldMetadataMaps.byId[fieldMetadataId];
const fieldMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: fieldMetadataId,
flatEntityMaps: flatFieldMetadataMaps,
});
if (!fieldMetadata) {
throw new Error(
@@ -16,6 +16,7 @@ import {
import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util';
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import {
buildFieldMapsFromFlatObjectMetadata,
@@ -80,9 +81,10 @@ export function formatResult<T>(
fieldIdByName[key] ||
fieldIdByName[compositePropertyArgs?.parentField ?? ''];
const fieldMetadata = flatFieldMetadataMaps.byId[fieldMetadataId] as
| FlatFieldMetadata<FieldMetadataType>
| undefined;
const fieldMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: fieldMetadataId,
flatEntityMaps: flatFieldMetadataMaps,
});
const isRelation = fieldMetadata
? isFieldMetadataEntityOfType(fieldMetadata, FieldMetadataType.RELATION)
@@ -116,10 +118,10 @@ export function formatResult<T>(
);
}
const targetObjectMetadata =
flatObjectMetadataMaps.byId[
fieldMetadata.relationTargetObjectMetadataId
];
const targetObjectMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: fieldMetadata.relationTargetObjectMetadataId,
flatEntityMaps: flatObjectMetadataMaps,
});
if (!targetObjectMetadata) {
throw new Error(
@@ -2,6 +2,7 @@ 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,
@@ -35,8 +36,10 @@ export const getObjectMetadataFromEntityTarget = <T extends ObjectLiteral>(
);
}
const objectMetadata =
internalContext.flatObjectMetadataMaps.byId[objectMetadataId];
const objectMetadata = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: objectMetadataId,
flatEntityMaps: internalContext.flatObjectMetadataMaps,
});
if (!objectMetadata) {
throw new TwentyORMException(