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:
@ -13,6 +13,10 @@ import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadat
|
||||
import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util';
|
||||
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
|
||||
import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
|
||||
import {
|
||||
WorkspaceMigrationException,
|
||||
WorkspaceMigrationExceptionCode,
|
||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.exception';
|
||||
|
||||
export type BasicFieldMetadataType =
|
||||
| FieldMetadataType.UUID
|
||||
@ -66,8 +70,9 @@ export class BasicColumnActionFactory extends ColumnActionAbstractFactory<BasicF
|
||||
this.logger.error(
|
||||
`Column name not found for current or altered field metadata, can be due to a missing or an invalid target column map. Current column name: ${currentColumnName}, Altered column name: ${alteredColumnName}.`,
|
||||
);
|
||||
throw new Error(
|
||||
throw new WorkspaceMigrationException(
|
||||
`Column name not found for current or altered field metadata`,
|
||||
WorkspaceMigrationExceptionCode.INVALID_FIELD_METADATA,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -12,6 +12,10 @@ import {
|
||||
WorkspaceMigrationColumnAlter,
|
||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
|
||||
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import {
|
||||
WorkspaceMigrationException,
|
||||
WorkspaceMigrationExceptionCode,
|
||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.exception';
|
||||
|
||||
export class ColumnActionAbstractFactory<
|
||||
T extends FieldMetadataType | 'default',
|
||||
@ -32,7 +36,10 @@ export class ColumnActionAbstractFactory<
|
||||
return this.handleCreateAction(alteredFieldMetadata, options);
|
||||
case WorkspaceMigrationColumnActionType.ALTER: {
|
||||
if (!currentFieldMetadata) {
|
||||
throw new Error('current field metadata is required for alter');
|
||||
throw new WorkspaceMigrationException(
|
||||
'current field metadata is required for alter',
|
||||
WorkspaceMigrationExceptionCode.INVALID_FIELD_METADATA,
|
||||
);
|
||||
}
|
||||
|
||||
return this.handleAlterAction(
|
||||
@ -43,8 +50,10 @@ export class ColumnActionAbstractFactory<
|
||||
}
|
||||
default: {
|
||||
this.logger.error(`Invalid action: ${action}`);
|
||||
|
||||
throw new Error('[AbstractFactory]: invalid action');
|
||||
throw new WorkspaceMigrationException(
|
||||
'[AbstractFactory]: invalid action',
|
||||
WorkspaceMigrationExceptionCode.INVALID_ACTION,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -53,7 +62,10 @@ export class ColumnActionAbstractFactory<
|
||||
_fieldMetadata: FieldMetadataInterface<T>,
|
||||
_options?: WorkspaceColumnActionOptions,
|
||||
): WorkspaceMigrationColumnCreate[] {
|
||||
throw new Error('handleCreateAction method not implemented.');
|
||||
throw new WorkspaceMigrationException(
|
||||
'handleCreateAction method not implemented.',
|
||||
WorkspaceMigrationExceptionCode.INVALID_ACTION,
|
||||
);
|
||||
}
|
||||
|
||||
protected handleAlterAction(
|
||||
@ -61,6 +73,9 @@ export class ColumnActionAbstractFactory<
|
||||
_alteredFieldMetadata: FieldMetadataInterface<T>,
|
||||
_options?: WorkspaceColumnActionOptions,
|
||||
): WorkspaceMigrationColumnAlter[] {
|
||||
throw new Error('handleAlterAction method not implemented.');
|
||||
throw new WorkspaceMigrationException(
|
||||
'handleAlterAction method not implemented.',
|
||||
WorkspaceMigrationExceptionCode.INVALID_ACTION,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,6 +13,10 @@ import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/works
|
||||
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
|
||||
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
|
||||
import { compositeTypeDefintions } from 'src/engine/metadata-modules/field-metadata/composite-types';
|
||||
import {
|
||||
WorkspaceMigrationException,
|
||||
WorkspaceMigrationExceptionCode,
|
||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.exception';
|
||||
|
||||
export type CompositeFieldMetadataType =
|
||||
| FieldMetadataType.ADDRESS
|
||||
@ -34,8 +38,9 @@ export class CompositeColumnActionFactory extends ColumnActionAbstractFactory<Co
|
||||
this.logger.error(
|
||||
`Composite type not found for field metadata type: ${fieldMetadata.type}`,
|
||||
);
|
||||
throw new Error(
|
||||
throw new WorkspaceMigrationException(
|
||||
`Composite type not found for field metadata type: ${fieldMetadata.type}`,
|
||||
WorkspaceMigrationExceptionCode.INVALID_FIELD_METADATA,
|
||||
);
|
||||
}
|
||||
|
||||
@ -74,8 +79,9 @@ export class CompositeColumnActionFactory extends ColumnActionAbstractFactory<Co
|
||||
this.logger.error(
|
||||
`Composite type not found for field metadata type: ${currentFieldMetadata.type} or ${alteredFieldMetadata.type}`,
|
||||
);
|
||||
throw new Error(
|
||||
throw new WorkspaceMigrationException(
|
||||
`Composite type not found for field metadata type: ${currentFieldMetadata.type} or ${alteredFieldMetadata.type}`,
|
||||
WorkspaceMigrationExceptionCode.INVALID_FIELD_METADATA,
|
||||
);
|
||||
}
|
||||
|
||||
@ -91,8 +97,9 @@ export class CompositeColumnActionFactory extends ColumnActionAbstractFactory<Co
|
||||
this.logger.error(
|
||||
`Current property not found for altered property: ${alteredProperty.name}`,
|
||||
);
|
||||
throw new Error(
|
||||
throw new WorkspaceMigrationException(
|
||||
`Current property not found for altered property: ${alteredProperty.name}`,
|
||||
WorkspaceMigrationExceptionCode.INVALID_FIELD_METADATA,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -13,6 +13,10 @@ import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadat
|
||||
import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util';
|
||||
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
|
||||
import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
|
||||
import {
|
||||
WorkspaceMigrationException,
|
||||
WorkspaceMigrationExceptionCode,
|
||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.exception';
|
||||
|
||||
export type EnumFieldMetadataType =
|
||||
| FieldMetadataType.RATING
|
||||
@ -82,8 +86,9 @@ export class EnumColumnActionFactory extends ColumnActionAbstractFactory<EnumFie
|
||||
this.logger.error(
|
||||
`Column name not found for current or altered field metadata, can be due to a missing or an invalid target column map. Current column name: ${currentColumnName}, Altered column name: ${alteredColumnName}.`,
|
||||
);
|
||||
throw new Error(
|
||||
throw new WorkspaceMigrationException(
|
||||
`Column name not found for current or altered field metadata`,
|
||||
WorkspaceMigrationExceptionCode.INVALID_FIELD_METADATA,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,8 @@
|
||||
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import {
|
||||
WorkspaceMigrationException,
|
||||
WorkspaceMigrationExceptionCode,
|
||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.exception';
|
||||
|
||||
export const fieldMetadataTypeToColumnType = <Type extends FieldMetadataType>(
|
||||
fieldMetadataType: Type,
|
||||
@ -34,6 +38,9 @@ export const fieldMetadataTypeToColumnType = <Type extends FieldMetadataType>(
|
||||
case FieldMetadataType.RAW_JSON:
|
||||
return 'jsonb';
|
||||
default:
|
||||
throw new Error(`Cannot convert ${fieldMetadataType} to column type.`);
|
||||
throw new WorkspaceMigrationException(
|
||||
`Cannot convert ${fieldMetadataType} to column type.`,
|
||||
WorkspaceMigrationExceptionCode.INVALID_FIELD_METADATA,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
import { CustomException } from 'src/utils/custom-exception';
|
||||
|
||||
export class WorkspaceMigrationException extends CustomException {
|
||||
code: WorkspaceMigrationExceptionCode;
|
||||
constructor(message: string, code: WorkspaceMigrationExceptionCode) {
|
||||
super(message, code);
|
||||
}
|
||||
}
|
||||
|
||||
export enum WorkspaceMigrationExceptionCode {
|
||||
NO_FACTORY_FOUND = 'NO_FACTORY_FOUND',
|
||||
INVALID_ACTION = 'INVALID_ACTION',
|
||||
INVALID_FIELD_METADATA = 'INVALID_FIELD_METADATA',
|
||||
}
|
||||
@ -12,6 +12,10 @@ import {
|
||||
import { BasicColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/basic-column-action.factory';
|
||||
import { EnumColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/enum-column-action.factory';
|
||||
import { CompositeColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory';
|
||||
import {
|
||||
WorkspaceMigrationException,
|
||||
WorkspaceMigrationExceptionCode,
|
||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.exception';
|
||||
|
||||
@Injectable()
|
||||
export class WorkspaceMigrationFactory {
|
||||
@ -131,7 +135,10 @@ export class WorkspaceMigrationFactory {
|
||||
undefinedOrAlteredFieldMetadata,
|
||||
);
|
||||
|
||||
throw new Error(`No field metadata provided for action ${action}`);
|
||||
throw new WorkspaceMigrationException(
|
||||
`No field metadata provided for action ${action}`,
|
||||
WorkspaceMigrationExceptionCode.INVALID_ACTION,
|
||||
);
|
||||
}
|
||||
|
||||
const columnActions = this.createColumnAction(
|
||||
@ -161,7 +168,10 @@ export class WorkspaceMigrationFactory {
|
||||
},
|
||||
);
|
||||
|
||||
throw new Error(`No factory found for type ${alteredFieldMetadata.type}`);
|
||||
throw new WorkspaceMigrationException(
|
||||
`No factory found for type ${alteredFieldMetadata.type}`,
|
||||
WorkspaceMigrationExceptionCode.NO_FACTORY_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return factory.create(
|
||||
|
||||
Reference in New Issue
Block a user