## Context Field metadata service was reusing validators from validate-**OBJECT**-metadata-input which were throwing ObjectMetadata exceptions not handled in fieldMetadataGraphqlApiExceptionHandler and were going to Sentry. To solve the issue since this validator is associated with both fields and objects I'm moving the util to the root utils folder of metadata module and throwing a common metadata user input exception
40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
import {
|
|
ConflictError,
|
|
ForbiddenError,
|
|
InternalServerError,
|
|
NotFoundError,
|
|
UserInputError,
|
|
} from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
|
|
import {
|
|
FieldMetadataException,
|
|
FieldMetadataExceptionCode,
|
|
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
|
|
import { InvalidMetadataException } from 'src/engine/metadata-modules/utils/exceptions/invalid-metadata.exception';
|
|
|
|
export const fieldMetadataGraphqlApiExceptionHandler = (error: Error) => {
|
|
if (error instanceof InvalidMetadataException) {
|
|
throw new UserInputError(error.message);
|
|
}
|
|
|
|
if (error instanceof FieldMetadataException) {
|
|
switch (error.code) {
|
|
case FieldMetadataExceptionCode.FIELD_METADATA_NOT_FOUND:
|
|
throw new NotFoundError(error.message);
|
|
case FieldMetadataExceptionCode.INVALID_FIELD_INPUT:
|
|
throw new UserInputError(error.message);
|
|
case FieldMetadataExceptionCode.FIELD_MUTATION_NOT_ALLOWED:
|
|
throw new ForbiddenError(error.message);
|
|
case FieldMetadataExceptionCode.FIELD_ALREADY_EXISTS:
|
|
throw new ConflictError(error.message);
|
|
case FieldMetadataExceptionCode.OBJECT_METADATA_NOT_FOUND:
|
|
case FieldMetadataExceptionCode.INTERNAL_SERVER_ERROR:
|
|
case FieldMetadataExceptionCode.FIELD_METADATA_RELATION_NOT_ENABLED:
|
|
case FieldMetadataExceptionCode.FIELD_METADATA_RELATION_MALFORMED:
|
|
default:
|
|
throw new InternalServerError(error.message);
|
|
}
|
|
}
|
|
|
|
throw error;
|
|
};
|