fix: many fields in an object (#10061)
Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
import DataLoader from 'dataloader';
|
||||
|
||||
import {
|
||||
FieldMetadataLoaderPayload,
|
||||
RelationLoaderPayload,
|
||||
RelationMetadataLoaderPayload,
|
||||
} from 'src/engine/dataloaders/dataloader.service';
|
||||
@ -23,4 +24,9 @@ export interface IDataloaders {
|
||||
targetFieldMetadata: FieldMetadataEntity;
|
||||
}
|
||||
>;
|
||||
|
||||
fieldMetadataLoader: DataLoader<
|
||||
FieldMetadataLoaderPayload,
|
||||
FieldMetadataEntity[]
|
||||
>;
|
||||
}
|
||||
|
||||
@ -3,9 +3,11 @@ import { Injectable } from '@nestjs/common';
|
||||
import DataLoader from 'dataloader';
|
||||
|
||||
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
|
||||
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
|
||||
|
||||
import { IDataloaders } from 'src/engine/dataloaders/dataloader.interface';
|
||||
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { FieldMetadataService } from 'src/engine/metadata-modules/field-metadata/field-metadata.service';
|
||||
import { FieldMetadataRelationService } from 'src/engine/metadata-modules/field-metadata/relation/field-metadata-relation.service';
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
||||
@ -31,20 +33,28 @@ export type RelationLoaderPayload = {
|
||||
>;
|
||||
};
|
||||
|
||||
export type FieldMetadataLoaderPayload = {
|
||||
workspaceId: string;
|
||||
objectMetadata: Pick<ObjectMetadataInterface, 'id'>;
|
||||
};
|
||||
|
||||
@Injectable()
|
||||
export class DataloaderService {
|
||||
constructor(
|
||||
private readonly relationMetadataService: RelationMetadataService,
|
||||
private readonly fieldMetadataRelationService: FieldMetadataRelationService,
|
||||
private readonly fieldMetadataService: FieldMetadataService,
|
||||
) {}
|
||||
|
||||
createLoaders(): IDataloaders {
|
||||
const relationMetadataLoader = this.createRelationMetadataLoader();
|
||||
const relationLoader = this.createRelationLoader();
|
||||
const fieldMetadataLoader = this.createFieldMetadataLoader();
|
||||
|
||||
return {
|
||||
relationMetadataLoader,
|
||||
relationLoader,
|
||||
fieldMetadataLoader,
|
||||
};
|
||||
}
|
||||
|
||||
@ -92,4 +102,23 @@ export class DataloaderService {
|
||||
return fieldMetadataRelationCollection;
|
||||
});
|
||||
}
|
||||
|
||||
private createFieldMetadataLoader() {
|
||||
return new DataLoader<FieldMetadataLoaderPayload, FieldMetadataEntity[]>(
|
||||
async (dataLoaderParams: FieldMetadataLoaderPayload[]) => {
|
||||
const workspaceId = dataLoaderParams[0].workspaceId;
|
||||
const objectMetadataItems = dataLoaderParams.map(
|
||||
(dataLoaderParam) => dataLoaderParam.objectMetadata,
|
||||
);
|
||||
|
||||
const fieldMetadataCollection =
|
||||
await this.fieldMetadataService.getFieldMetadataItemsByBatch(
|
||||
objectMetadataItems.map((item) => item.id),
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
return fieldMetadataCollection;
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user