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

@ -5,6 +5,7 @@ import {
} from '@nestjs/common';
import {
Args,
Context,
Mutation,
Parent,
ResolveField,
@ -12,6 +13,7 @@ import {
} from '@nestjs/graphql';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { IDataloaders } from 'src/engine/dataloaders/dataloader.interface';
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
import { JwtAuthGuard } from 'src/engine/guards/jwt.auth.guard';
import { CreateOneFieldMetadataInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
@ -89,7 +91,21 @@ export class FieldMetadataResolver {
@ResolveField(() => RelationDefinitionDTO, { nullable: true })
async relationDefinition(
@Parent() fieldMetadata: FieldMetadataDTO,
@Context() context: { loaders: IDataloaders },
): Promise<RelationDefinitionDTO | null> {
return await this.fieldMetadataService.getRelationDefinition(fieldMetadata);
if (fieldMetadata.type !== FieldMetadataType.RELATION) {
return null;
}
const relationMetadataItem =
await context.loaders.relationMetadataLoader.load(fieldMetadata.id);
const relationDefinition =
await this.fieldMetadataService.getRelationDefinitionFromRelationMetadata(
fieldMetadata,
relationMetadataItem,
);
return relationDefinition;
}
}