Fix object metadata not found (#6416)

This commit is contained in:
Charles Bochet
2024-07-25 20:34:50 +02:00
committed by GitHub
parent 4cb83e050f
commit 8083175432

View File

@ -1,3 +1,5 @@
import { isPlainObject } from '@nestjs/common/utils/shared.utils';
import { import {
DeepPartial, DeepPartial,
DeleteResult, DeleteResult,
@ -29,7 +31,6 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat
import { WorkspaceEntitiesStorage } from 'src/engine/twenty-orm/storage/workspace-entities.storage'; import { WorkspaceEntitiesStorage } from 'src/engine/twenty-orm/storage/workspace-entities.storage';
import { computeRelationType } from 'src/engine/twenty-orm/utils/compute-relation-type.util'; import { computeRelationType } from 'src/engine/twenty-orm/utils/compute-relation-type.util';
import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util';
import { isPlainObject } from 'src/utils/is-plain-object';
export class WorkspaceRepository< export class WorkspaceRepository<
Entity extends ObjectLiteral, Entity extends ObjectLiteral,
@ -620,21 +621,31 @@ export class WorkspaceRepository<
throw new Error('Object metadata name is missing'); throw new Error('Object metadata name is missing');
} }
return this.internalContext.workspaceCacheStorage.getObjectMetadata( const objectMetadata =
this.internalContext.workspaceId, await this.internalContext.workspaceCacheStorage.getObjectMetadata(
(objectMetadata) => objectMetadata.nameSingular === objectMetadataName, this.internalContext.workspaceId,
); (objectMetadata) => objectMetadata.nameSingular === objectMetadataName,
} );
private async getCompositeFieldMetadata(
objectMetadata?: ObjectMetadataEntity,
) {
objectMetadata ??= await this.getObjectMetadataFromTarget();
if (!objectMetadata) { if (!objectMetadata) {
throw new Error('Object metadata entity is missing'); const objectMetadataCollection =
await this.internalContext.workspaceCacheStorage.getObjectMetadataCollection(
this.internalContext.workspaceId,
);
throw new Error(
`Object metadata for object "${objectMetadataName}" is missing` +
`in workspace "${this.internalContext.workspaceId}" ` +
`with object metadata collection length: ${objectMetadataCollection?.length}`,
);
} }
return objectMetadata;
}
private async getCompositeFieldMetadataCollection(
objectMetadata: ObjectMetadataEntity,
) {
const compositeFieldMetadataCollection = objectMetadata.fields.filter( const compositeFieldMetadataCollection = objectMetadata.fields.filter(
(fieldMetadata) => isCompositeFieldMetadataType(fieldMetadata.type), (fieldMetadata) => isCompositeFieldMetadataType(fieldMetadata.type),
); );
@ -666,8 +677,11 @@ export class WorkspaceRepository<
data.map((item) => this.formatData(item)), data.map((item) => this.formatData(item)),
) as Promise<T>; ) as Promise<T>;
} }
const objectMetadata = await this.getObjectMetadataFromTarget();
const compositeFieldMetadataCollection = const compositeFieldMetadataCollection =
await this.getCompositeFieldMetadata(); await this.getCompositeFieldMetadataCollection(objectMetadata);
const compositeFieldMetadataMap = new Map( const compositeFieldMetadataMap = new Map(
compositeFieldMetadataCollection.map((fieldMetadata) => [ compositeFieldMetadataCollection.map((fieldMetadata) => [
fieldMetadata.name, fieldMetadata.name,
@ -738,7 +752,8 @@ export class WorkspaceRepository<
} }
const compositeFieldMetadataCollection = const compositeFieldMetadataCollection =
await this.getCompositeFieldMetadata(objectMetadata); await this.getCompositeFieldMetadataCollection(objectMetadata);
const compositeFieldMetadataMap = new Map( const compositeFieldMetadataMap = new Map(
compositeFieldMetadataCollection.flatMap((fieldMetadata) => { compositeFieldMetadataCollection.flatMap((fieldMetadata) => {
const compositeType = compositeTypeDefintions.get(fieldMetadata.type); const compositeType = compositeTypeDefintions.get(fieldMetadata.type);