Add exceptions for metadata modules (#6070)

Class exception for each metadata module + handler to map on graphql
error

TODO left :
- find a way to call handler on auto-resolvers nestjs query (probably
interceptors)
- discuss what should be done for pre-hooks errors
- discuss what should be done for Unauthorized exception
This commit is contained in:
Thomas Trompette
2024-07-01 13:49:17 +02:00
committed by GitHub
parent 4599f43b6c
commit a15884ea0a
48 changed files with 815 additions and 199 deletions

View File

@ -23,6 +23,7 @@ import { RelationDefinitionDTO } from 'src/engine/metadata-modules/field-metadat
import { UpdateOneFieldMetadataInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { FieldMetadataService } from 'src/engine/metadata-modules/field-metadata/field-metadata.service';
import { fieldMetadataGraphqlApiExceptionHandler } from 'src/engine/metadata-modules/field-metadata/utils/field-metadata-graphql-api-exception-handler.util';
@UseGuards(JwtAuthGuard)
@Resolver(() => FieldMetadataDTO)
@ -34,10 +35,14 @@ export class FieldMetadataResolver {
@Args('input') input: CreateOneFieldMetadataInput,
@AuthWorkspace() { id: workspaceId }: Workspace,
) {
return this.fieldMetadataService.createOne({
...input.field,
workspaceId,
});
try {
return this.fieldMetadataService.createOne({
...input.field,
workspaceId,
});
} catch (error) {
fieldMetadataGraphqlApiExceptionHandler(error);
}
}
@Mutation(() => FieldMetadataDTO)
@ -45,10 +50,14 @@ export class FieldMetadataResolver {
@Args('input') input: UpdateOneFieldMetadataInput,
@AuthWorkspace() { id: workspaceId }: Workspace,
) {
return this.fieldMetadataService.updateOne(input.id, {
...input.update,
workspaceId,
});
try {
return this.fieldMetadataService.updateOne(input.id, {
...input.update,
workspaceId,
});
} catch (error) {
fieldMetadataGraphqlApiExceptionHandler(error);
}
}
@Mutation(() => FieldMetadataDTO)
@ -85,27 +94,32 @@ export class FieldMetadataResolver {
);
}
return this.fieldMetadataService.deleteOneField(input, workspaceId);
try {
return this.fieldMetadataService.deleteOneField(input, workspaceId);
} catch (error) {
fieldMetadataGraphqlApiExceptionHandler(error);
}
}
@ResolveField(() => RelationDefinitionDTO, { nullable: true })
async relationDefinition(
@Parent() fieldMetadata: FieldMetadataDTO,
@Context() context: { loaders: IDataloaders },
): Promise<RelationDefinitionDTO | null> {
): Promise<RelationDefinitionDTO | null | undefined> {
if (fieldMetadata.type !== FieldMetadataType.RELATION) {
return null;
}
const relationMetadataItem =
await context.loaders.relationMetadataLoader.load(fieldMetadata.id);
try {
const relationMetadataItem =
await context.loaders.relationMetadataLoader.load(fieldMetadata.id);
const relationDefinition =
await this.fieldMetadataService.getRelationDefinitionFromRelationMetadata(
return this.fieldMetadataService.getRelationDefinitionFromRelationMetadata(
fieldMetadata,
relationMetadataItem,
);
return relationDefinition;
} catch (error) {
fieldMetadataGraphqlApiExceptionHandler(error);
}
}
}