Implemented dataloader for relation metadata (#4891)

- Implemented dataloader package on metadata graphql server
- Implemented a dataloader for relation metadata module

---------

Co-authored-by: Jérémy M <jeremy.magrin@gmail.com>
This commit is contained in:
Lucas Bordeau
2024-04-09 17:09:02 +02:00
committed by GitHub
parent b724c5e610
commit ee5aaae796
8 changed files with 132 additions and 40 deletions

View File

@ -0,0 +1,7 @@
import DataLoader from 'dataloader';
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
export interface IDataloaders {
relationMetadataLoader: DataLoader<string, RelationMetadataEntity>;
}

View File

@ -0,0 +1,11 @@
import { Module } from '@nestjs/common';
import { DataloaderService } from 'src/engine/dataloaders/dataloader.service';
import { RelationMetadataModule } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.module';
@Module({
providers: [DataloaderService],
imports: [RelationMetadataModule],
exports: [DataloaderService],
})
export class DataloaderModule {}

View File

@ -0,0 +1,32 @@
import { Injectable } from '@nestjs/common';
import DataLoader from 'dataloader';
import { IDataloaders } from 'src/engine/dataloaders/dataloader.interface';
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { RelationMetadataService } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.service';
@Injectable()
export class DataloaderService {
constructor(
private readonly relationMetadataService: RelationMetadataService,
) {}
createLoaders(): IDataloaders {
const relationMetadataLoader = new DataLoader<
string,
RelationMetadataEntity
>(async (fieldMetadataIds: string[]) => {
const relationsMetadataCollection =
await this.relationMetadataService.findManyRelationMetadataByFieldMetadataIds(
fieldMetadataIds,
);
return relationsMetadataCollection;
});
return {
relationMetadataLoader,
};
}
}